Laravel 在路由中调用角色数组

问题描述 投票:0回答:1

如果我创建更多角色,我会在 Laravel 路由中调用角色数组,我无法手动在路由中添加角色帮助我修复

<?php

use Illuminate\Support\Facades\Route;
use App\Models\Role;

$rolelist = Role::pluck('name')->toArray(); //roles Are Admin,Staff & More...

Route::middleware(['auth', 'roles:$rolelist'])->group(function () {
  //****START HomeController **** 
    Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); 
  //****END HomeController    ****
});

如果我创建更多角色,我会在 Laravel 路由中调用角色数组,我无法手动在路由中添加角色帮助我修复

laravel laravel-routing laravel-10
1个回答
0
投票

为什么要获取路由中的角色而不使用动态中间件?

不要直接在角色参数中传递数组,而是创建一个动态检索允许的角色的中间件,例如AllowedRolesMiddleware,

class AllowedRolesMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        $allowedRoles = Role::pluck('name')->toArray();

        if (!in_array($request->user()->role->name, $allowedRoles)) {
            abort(403);
        }

        return $next($request);
    }
}

然后,更新您的路由以使用此中间件:

Route::middleware(['auth', 'allowed_roles'])->group(function () {
    // your routes
});

并且不要忘记将其添加到路由中间件中。

protected $routeMiddleware = [
    'allowed_roles' => \App\Http\Middleware\AllowedRolesMiddleware::class,
];
© www.soinside.com 2019 - 2024. All rights reserved.