【问题标题】:Laravel Routes and middlewareLaravel 路由和中间件
【发布时间】:2020-12-09 10:44:55
【问题描述】:

我有一个从 `https://gist.github.com/amochohan/8cb599ee5dc0af5f4246 复制的中间件

Route::get('user/{user}', [
 'middleware' => ['auth', 'roles'],
 'uses' => 'UserController@index',
 'roles' => ['administrator', 'manager']
]);

我的路线

如何将角色添加到资源中

Route::resource('user','UserController')->middleware(['auth','roles']);;

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    无需深入研究如何从注册器注册资源路由,您只需将其包装在路由组中并设置角色:

    Route::group(['roles' => ['admin', ...], function () {
        Route::resource(..., ...);
    });
    

    所有路线都是单独注册的;路由组是级联配置的一种方式。

    【讨论】:

      【解决方案2】:

      那是错误的说法...您没有将角色添加到资源中,角色中间件需要存在于 app/Http/Middleware/Roles.php 下

      然后在该类中,您可以创建逻辑...

      这只是一个伪代码,但你应该明白:

      class Roles
      {
          public function handle($request, Closure $next)
          {
              if(! in_array(auth()->user()->role, $roles)) {
                 return redirect()->back()->with('alert', 'Access Denied! Action not allowed.');
              }
      
              return $next($request);
          }
      }
      

      要将角色传递给中间件,您应该在官方文档中阅读更多相关信息:https://laravel.com/docs/7.x/middleware#middleware-parameters

      这是从一些博客文章中复制的:

      Route::get('/some-url',['middleware'=>'roles:admin, editor', function () {
           return "Access is granted for this operation";
       
      }]);
      

      和角色中间件中的句柄函数

      public function handle($request, Closure $next, ...$params)
      {
       
          print_r($params);
       
          exit;
       
          return $next($request);
      }
      

      $params 应该返回角色数组 ['admin', 'editor']

      【讨论】:

        猜你喜欢
        • 2022-01-11
        • 2019-03-02
        • 2016-12-09
        • 2021-12-29
        • 2015-10-26
        • 2017-10-17
        • 2017-10-11
        • 2016-05-03
        • 2020-06-24
        相关资源
        最近更新 更多