如果我创建更多角色,我会在 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 路由中调用角色数组,我无法手动在路由中添加角色帮助我修复
为什么要获取路由中的角色而不使用动态中间件?
不要直接在角色参数中传递数组,而是创建一个动态检索允许的角色的中间件,例如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,
];