【问题标题】:Laravel middleware multi roles routingLaravel 中间件多角色路由
【发布时间】:2019-09-21 20:22:58
【问题描述】:

我在使用中间件多角色进行路由时遇到问题 我在互联网上尝试了一些,但仍然无法正常工作

我有 3 个角色,超级管理员、管理员和成员 我希望超级管理员和管理员可以访问添加页面

这是我的代码:

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


    Route::GET('/add', [
        'uses'       => 'StaffController@page_add',
        'middleware' => 'rule:superadmin', ???
    ]);

});

我试图把'middleware' => 'rule:superadmin|rule:admin' 但不会工作

谢谢

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    创建一个中间件文件,例如 Role.php

    public function handle($request, Closure $next, ... $roles)
    {
        if (!Auth::check()) // I included this check because you have it, but it really should be part of your 'auth' middleware, most likely added as part of a route group.
            return redirect('login');
    
        $user = Auth::user();
    
        if($user->isAdmin())
            return $next($request);
    
        foreach($roles as $role) {
            // Check if user has the role This check will depend on how your roles are set up
            if($user->hasRole($role))
                return $next($request);
        }
    
        return redirect('login');
    }
    

    终于在你的网络路由中

    Route::get('admin/scholen/overzicht', 'SchoolsController@overview')->middleware('role:editor,approver');
    Route::get('admin/scholen/{id}/bewerken', 'SchoolsController@edit')->middleware('role:admin');
    

    查看best answer了解更多详情

    【讨论】:

      【解决方案2】:

      您可以在您的用户表中放置一个名为“角色”的列,然后使用条件进行检查。

       Route::get('/add', function() {
          if (Auth::user()->role == 'superadmin' || Auth::user()->role == 'admin') {
            return view('add-page');
          } 
          else {
            return view('error-page');
          } 
        });
      

      【讨论】:

        猜你喜欢
        • 2020-08-08
        • 2018-09-08
        • 2018-09-25
        • 2015-08-31
        • 2021-11-12
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 2020-02-15
        相关资源
        最近更新 更多