Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
В app/Http/Authenticate.php добавил такой код
public function handle($request, Closure $next)
{
if ($request->user()->hasRole('admin') {
return $next($request);
}
else if ($request->user()->hasRole('user'))
{
return redirect('404');
}
else
return redirect('/');
}
Пользователь с ролью user при попытке пройти по /admin получает 404, но, к примеру, /admin/articles - открывается
Не в сети
Если я правильно понял.
Создайте новый middleware(посредника),который будет проверять и делать редирект в случае не прохождения запроса.
После объедените префиксом все маршруты начинающиеся с "admin" и установите для них middleware.
RoRoute::group(['prefix' => 'admin', 'middleware' => 'имя вашего middleware'], function () {
Route::get('users', function () {
// Соответствует URL "/admin/users"
});
});
Изменено kurtkaa (09.03.2017 01:29:52)
Не в сети
Пользователь с ролью user при попытке пройти по /admin получает 404, но, к примеру, /admin/articles - открывается
значит на /admin/articles эта миддлварь не применяется. почему – другой вопрос. согласен с kurtkaa что миддлвари лучше назначать через группы маршрутов. скорее всего в /admin оно вбито в конструкторе контроллера, а у /admin/articles другой контроллер и у него нет добавления этой миддлвари в конструкторе
Не в сети
Пользователь с ролью user при попытке пройти по /admin получает 404, но, к примеру, /admin/articles - открывается
значит на /admin/articles эта миддлварь не применяется. почему – другой вопрос. согласен с kurtkaa что миддлвари лучше назначать через группы маршрутов. скорее всего в /admin оно вбито в конструкторе контроллера, а у /admin/articles другой контроллер и у него нет добавления этой миддлвари в конструкторе
Т. е. в app/Http/Middleware нужно создать еще один класс, который будет управлять нужной ролью?
Не в сети
Может быть можно дополнить класс redirectifauthentificated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/admin');
}
return $next($request);
}
чтобы здесь была проверка на роль, и ее не пускало в админку
Не в сети
в 5.4 есть миддлварь can которая проверяет наличие у юзера указанного пермишена. я бы просто определил пермишен admin и в маршрутах на группу повесил 'middleware' => [..., 'can:admin']. вся логика проверки ролей тогда будет внутри AuthServiceProvider – \Gate::define('admin', function ($user) { /* ... */ });
подробнее про пермишены и миддлварь can – https://laravel.com/docs/5.4/authorization
Не в сети
Страницы 1