Что вы можете сделать, это определить промежуточное программное обеспечение, которое принимает поддерживаемые роли в качестве аргумента:
class HasRoleMiddleware
{
public function handle($request, Closure $next, ...$roles)
{
if(Auth::check() && in_array(Auth::user()->getRole(), $roles)) {
return $next($request);
}
return redirect('login');
}
}
Это промежуточное программное обеспечение ожидает, что User::getRole()
возвращает роль в виде строки, то есть admin
или tutor
.Затем вам нужно определить промежуточное программное обеспечение в Kernel.php
, как вы уже сделали:
'any_role' => \App\Http\Middleware\HasRoleMiddleware::class,
И, наконец, вы можете использовать промежуточное программное обеспечение следующим образом:
Route::group(['middleware' => 'auth'], function () {
Route::group(['middleware' => 'any_role:admin'], function () {
// admin routes
}
Route::group(['middleware' => 'any_role:admin,tutor'], function () {
// tutor routes
}
}
Как видите,Я также вложил группы маршрутов, которые выполняют проверку ролей, в другую группу маршрутов, которая проверяет подлинность.Это делает его более читаемым и снижает риск того, что вы забудете проверку аутентификации в будущем расширении ваших маршрутов.