Добрый день
laravel 5.8
Вот мой НЕ работающий код
routes/web.php:
Route::group(['middleware'=>'auth'], function() {
Route::group(['middleware'=>'role:administrator'], function(){
Route::get("api/users", 'Admin\\UserController@get_list');
}); // administrator
Route::group(['middleware'=>'role:resident'], function(){
Route::get("api/users", 'Resident\\UserController@get_list');
}); // resident
});
RoleMiddleware:
class RoleMiddleware
{
public function handle($request, Closure $next, $role)
{
if (auth()->user() && auth()->user()->role == $role) {
return $next($request);
}
return $request;
} // func
}
Как вы видите из кода, мне бы хотелось:
авторизованный юзер открывает ссылку api/users
Если его роль admin - то срабатывает Admin\\UserController@get_list
Если его роль resident - то Resident\\UserController@get_list
Если его роль еще какая то - то 404
Если НЕ авторизованный юзер - то тоже 404
Как это работает сейчас
авторизованный юзер с ролью resident открывает ссылку api/users
срабатывает Resident\\UserController@get_list
тут все отлично
авторизованный юзер с ролью admin открывает ссылку api/users
Вылетает Argument 1 passed to Illuminate\Session\Middleware\StartSession::addCookieToResponse() must be an instance of Symfony\Component\HttpFoundation\Response, boolean given
Если посмотреть что происходит в RoleMiddleware - то в последний параметр $role попадает только значение "resident"
До проверки на admin не доходит
Получается, как только middleware встретила "не подходящий" запрос - все падает
Остальные роуты, которые могут подойти не проверяются - и вот это я хочу исправить
Можно ли сделать такую фильтрацию именно на уровне routes / middlewares
И если "да" - то как ?