0

我正在设计一个网站,只有登录用户才能访问网站某些部分的内容。那么以下哪种方法更安全且符合行业标准?

方法1:检查用户是否登录并在视图中执行如下操作:

@if (Auth::check())
   // content for logged in user
@else
   // Access restricted warning message for guests
@endif

方法2:使用路由技术

Route::get('study',array('before'=>'auth','uses'=>'home@study'));

同时使用这两种技术是没有意义的,对吧?

4

3 回答 3

3

在路由器中使用过滤器。 正如代号所建议的那样,使用过滤器。这是常见的做法,非常明确。

过滤器示例:

Route::group(array('before' => 'auth'), function()
{
    Route::controller('backend.index');
    Route::controller('backend.dashboard');
}

和过滤器定义:

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('login');
});
于 2013-04-29T14:23:44.997 回答
2

在这种情况下,绝对要使用过滤器,这正是它们的设计目的。

您可能会遇到的下一个粒度级别是根据登录用户的权限限制对 crud 操作的访问。在这种情况下,请考虑使用某种类型的 RBAC 实现的过滤器,有一个名为 Authority 的很棒的捆绑包可以帮助您执行此操作。

另外不要忘记,当用户被过滤器拒绝访问而不是 200 时,最佳做法是返回 403。

除此之外,您可能会根据登录用户的权限将不同的内容嵌套到您的视图中,因为我通常发现 RBAC 和视图作曲家的组合效果很好。

不要忘记您可以在控制器的构造函数以及路由级别应用过滤器,我经常发现这更加一致和可靠,但两者都是好方法。

http://www.laravel.com/docs/controllers#action-filters

于 2013-04-28T12:26:46.963 回答
0

两者都是安全的,可以互补使用。

博客示例:

在路线中

// Secure the edit post
Route::get('blog/edit',array('before'=>'auth','uses'=>'blog@getEdit')); 
// Display a post
Route::get('blog/read/{id}', 'blog@getRead'));

在“显示帖子”视图中:

@if (Auth::check())
   // display edit link
@endif
于 2013-04-28T12:24:48.980 回答