@DocTypeMaster

Как разграничить доступу в laravel?

Здравствуйте, есть Сайтик на ларавел и есть база юзеров в полях которого есть «status» и он может быть либо юзер либо админ. К слову говоря у Меня стоит пакет breeze.

И есть странички и в целом отдельный лаяут админа (админ панель), но зайти на неё могут все, я делал такую штуку что в файле с роутами проВерял статус и выводил для конкретного роута этот ретерн, но так делать не удобно ибо придётся для всех Роутов отдельно да и оно не убирает доступ а лишь скрывает вьюшку, подскажите как делать те вы и как правильно ?
  • Вопрос задан
  • 266 просмотров
Пригласить эксперта
Ответы на вопрос 1
@jazzus
Авторизацию правильно проверять через правила авторизации

Создаем новый файл роутов routes/admin/web.php. Копируем туда все админские роуты.

Прописываем в методе boot AuthServiceProvider правило
Gate::define('view-admin', function (User $user) {
    return $user->is_admin;
});

Подключаем в методе boot RouteServiceProvider админские роуты с ограничением доступа
Route::middleware(['web', 'can:view-admin'])
    ->namespace($this->namespace)
    ->group(base_path('routes/admin/web.php'));

Теперь перед каждым запросом админского роута будет выполняться проверка. Это же правило будет работать и в шаблонах, чтобы например скрыть кнопку.
@can('view-admin')
  кнопка
@endcan

или в логике
if ($user->can('view-admin')) {
    // code
}

что невозможно сделать без говнокода, если использовать только мидлвари, как предлагают.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы