繁体   English   中英

Laravel控制器中每个方法的动作过滤器

[英]Action filter for each method in Laravel controller

我正在为客户构建一个相当广泛的应用程序,我将不得不生成某种组权限控制。 我决定选择Cartalyst和他们的Sentry包。
到现在为止还挺好!

现在我遇到的问题是,检测用户组权限的最佳方法是什么,因为不仅仅有一个,所以我不能只使用一个过滤器并完成它。

例如,我会这样做:

对于需要管理员级别访问权限的页面

Route::group(array('before' => 'is_admin'), function()
{
       Route::get('admin', array('as'=>'admin', 'uses'=>'admin@index'));
       // Other methods that require admin-level access
});

对于需要更多级别访问等的页面..

Route::group(array('before' => 'is_moderator'), function()

    {
           Route::get('orodja/plosca', array('as'=>'moderator', 'uses'=>'moderator@index'));
           // Other methods that require moderator-level access
    });

我采用这种方法的问题是,我需要为每个控制器动作定义一个新的路径,这对我来说真的不是最佳实践。

接下来我想到用Controller::detect()注册所有控制器并使它们满REST但我在这里的问题是,我只能将过滤器应用于控制器的构造函数方法而不是单个操作。 如果我在一个控制器中使用不同访问级别的方法怎么办?

所以我的问题是:解决这个问题的最佳方法什么?有没有办法将动作过滤器应用于单个控制器方法,而不是控制器构造函数。

谢谢,抱歉我的英文!

您可以将过滤器附加到以给定URI开头的所有请求(请参阅有关过滤器官方文档

Route::filter('pattern: admin/*', 'auth');

或者,您只能将过滤器附加到控制器中的某些操作:

$this->filter('before', 'auth')->only(array('index', 'list'));

另外,您不必为每个控制器操作创建路径。 如果您使用Route::controller('admin::home');注册您的控制器Route::controller('admin::home'); 它会自动开火。

另一种选择是,你只定义一个auth过滤器的所有角色,然后检查过滤器的不同角色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM