【问题标题】:Laravel Route group using or condition for middleware中间件使用或条件的 Laravel 路由组
【发布时间】:2016-06-03 13:33:34
【问题描述】:

我正在尝试在 Laravel 5.2 中创建自定义授权和身份验证。

所以在我的路由文件中,首先我使用 auth middleware 检查用户是否经过身份验证。

Route::group(['middleware' => ['auth']], function () {

});

我有 3 个用户角色。

1.访客

2.经理

3.管理员

对于经理和管理员,我有两个中间件。

ManagerMiddleware(经理)和AminMiddleware(管理员)

对于特定功能,我想同时授予 adminma​​nager 的访问权限。

为此,我使用了这段代码

Route::group(['middleware' => ['auth']], function () {
    Route::group(['middleware' => ['admin','manager']], function () {
        Route::get('test','TestController@index')
    });
});

当然不行。第二个中间件同时检查 adminma​​nager 并失败,因为用户只属于特定角色。

所以我想在['middleware' => ['admin','manager']]中使用

在 Laravel 有什么办法吗?

【问题讨论】:

    标签: routes laravel-5.2 authorization middleware


    【解决方案1】:

    为什么不直接调用管理中间件:

    Route::group(['middleware' => ['auth']], function () {
      Route::group(['middleware' => ['admin']], function () {
        Route::get('test','TestController@index')
      });
    });
    

    如果用户注册为下一个请求的管理员进程,如果没有,则调用 管理器中间件:

    class AdminMiddleware
    {
        public function handle($request, Closure $next)
        {
            if (isAdmin())
                return $next($request);
            //If not admin call to ManagerMiddleware
            return app(ManagerMiddleware::class)->handle($request, function ($request) use ($next) {
                if (isManager())
                    return $next($request);
                //if neither admin nor manager reject request
                return redirect()->home();
            });
        }
    }
    

    或者反过来检查,先是管理员,然后是管理员,这样您仍然可以独立使用管理员权限。我不知道那个解决方案是否方便,这就是我目前要做的。

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 2021-12-29
      • 2022-01-11
      • 2012-11-06
      • 1970-01-01
      • 2020-08-23
      • 2015-08-17
      • 2020-03-22
      • 2015-12-17
      相关资源
      最近更新 更多