限制Laravel访问的最佳方法是什么?

时间:2013-04-28 12:12:05

标签: php laravel

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

方法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'));

同时使用这两种技术毫无意义,对吧?

3 个答案:

答案 0 :(得分:3)

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

过滤器示例:

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');
});

答案 1 :(得分:2)

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

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

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

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

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

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

答案 2 :(得分: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