Как применить разные Middlewares для одного роута?
Есть роут
Route::get('articles', 'ArticleController@index')->name('articles.index');
Есть две роли пользователя. Writer и Admin.
Для каждой роли существует группа мидлварей, определенных в Kernel.
Мне нужно, чтобы для каждой роли загружался свой список мидлварей.
Если бы я делал разные маршруты, я бы просто дописал к роуту
->middleware('forWriter')
И проблем нет. Но у меня 1 маршрут. И как быть? Как запустить разные группы мидлварей для одного роута или какой есть параллельный способ проверить запрос для разных ролей при одном маршруте?
Ответы (1 шт):
Не вижу проблем. Просто сделайте так к примеру:
Route::get('articles', 'ArticleController@index')
->name('articles.index')
->middleware(['forWriter', 'forAdmin']);
Далее в самих middleware у вас всегда известно кто на входе пришёл. Например:
//forWriter 1
public function handle($request, Closure $next)
{
if ($request->user()->isWriter()) {
// проверяете доступы для роли Writer иначе просто пропускаете!
}
return $next($request);
}
Так же вторую группу, только для админа! в результате применится тот посредник который необходим определённой роли!
То что в каждом middleware из группы нужно сделать проверку, это ничего страшного. Либо сделайте какой-нибудь хелпер, чтобы избежать дубля кода и вызывайте его в middleware