【问题标题】:How you can use 2 roles on 1 route?如何在 1 条路线上使用 2 个角色?
【发布时间】:2021-09-14 09:49:39
【问题描述】:

请告诉我如何在 1 条路线上使用 2 个角色。我正在使用 Laravel 权限。

路线

Route::group(['middleware' => ['role:user_сitisen']], function () {
    Route::get('/addcitisens', [App\Http\Controllers\CitisenControl::class, 'index']);
    Route::get('/citisen/{id}', [App\Http\Controllers\CitisenControl::class, 'show']);
    Route::post('/citisen/{id}', [App\Http\Controllers\CitisenControl::class, 'update'])->name('citisen');
    Route::get('/destroy/{id}', [App\Http\Controllers\CitisenControl::class, 'destroy']);
    Route::post('/citisens', [App\Http\Controllers\CitisenControl::class, 'store']);
    Route::get('/citisens/export', [App\Http\Controllers\CitisenControl::class, 'CitisenExport']);
});

Route::group(['middleware' => ['role:user_avto']], function () {
    Route::get('/avtoslist', [App\Http\Controllers\AvtosController::class, 'index']);
    Route::get('/addavtos', [App\Http\Controllers\AvtosController::class, 'indexAdd']);
    Route::post('/avtos', [App\Http\Controllers\AvtosController::class, 'store']);
});

Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/addcitisens', [App\Http\Controllers\CitisenControl::class, 'index']);
    Route::get('/citisen/{id}', [App\Http\Controllers\CitisenControl::class, 'show']);
    Route::post('/citisen/{id}', [App\Http\Controllers\CitisenControl::class, 'update'])->name('citisen');
    Route::get('/destroy/{id}', [App\Http\Controllers\CitisenControl::class, 'destroy']);
    Route::post('/citisens', [App\Http\Controllers\CitisenControl::class, 'store']);
    Route::get('/citisens/export', [App\Http\Controllers\CitisenControl::class, 'CitisenExport']);
    Route::get('/avtoslist', [App\Http\Controllers\AvtosController::class, 'index']);
    Route::get('/addavtos', [App\Http\Controllers\AvtosController::class, 'indexAdd']);
    Route::post('/avtos', [App\Http\Controllers\AvtosController::class, 'store']);
    Route::get('/usersList', [App\Http\Controllers\UsersController::class, 'index'])->name('usersList');
    Route::get('/addusers', [App\Http\Controllers\UsersController::class, 'indexUser']);
    Route::post('/users', [App\Http\Controllers\UsersController::class, 'store']);
    Route::get('/users/{id}', [App\Http\Controllers\UsersController::class, 'show']);
    Route::post('/users/{id}', [App\Http\Controllers\UsersController::class, 'update']);
    Route::get('/destroyuser/{id}', [App\Http\Controllers\UsersController::class, 'destroy']);
});

【问题讨论】:

    标签: laravel roles laravel-permission


    【解决方案1】:

    是的,但您也可以在中间件中进行更改。

    Route::group(['middleware' => ['auth','web','roles'],'roles'=>['admin','driver']],function() {
    
    });
    

    【讨论】:

      【解决方案2】:

      |分隔。

      Route::group(['middleware'=>['role:admin|user']],function(){
      

      来源:https://spatie.be/docs/laravel-permission/v4/basic-usage/middleware

      引用:Alternatively, you can separate multiple roles or permission with a | (pipe) character:

      【讨论】:

        【解决方案3】:

        在您的中间件中应用该逻辑。

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

        【讨论】:

          【解决方案4】:

          作为文档says

          您可以使用 | 分隔多个角色或权限(管道)字符:

          Route::group(['middleware' => ['role:super-admin|writer']], function () {
              //
          });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-11-23
            • 2015-12-10
            • 2019-09-10
            • 2016-10-01
            • 1970-01-01
            • 2021-11-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多