Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 08.03.2017 23:45:18

Как запретить доступ к админке?

В 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 - открывается

Не в сети

#2 09.03.2017 01:26:55

Re: Как запретить доступ к админке?

Если я правильно понял.
Создайте новый middleware(посредника),который будет проверять и делать редирект в случае не прохождения запроса.
После объедените префиксом все маршруты начинающиеся с "admin" и установите для них middleware.

RoRoute::group(['prefix' => 'admin', 'middleware' => 'имя вашего middleware'], function () {
  Route::get('users', function ()    {
    // Соответствует URL "/admin/users"
  });
});

Изменено kurtkaa (09.03.2017 01:29:52)

Не в сети

#3 09.03.2017 05:38:52

Re: Как запретить доступ к админке?

Пользователь с ролью user при попытке пройти по /admin получает 404, но, к примеру, /admin/articles - открывается

значит на /admin/articles эта миддлварь не применяется. почему – другой вопрос. согласен с kurtkaa что миддлвари лучше назначать через группы маршрутов. скорее всего в /admin оно вбито в конструкторе контроллера, а у /admin/articles другой контроллер и у него нет добавления этой миддлвари в конструкторе

Не в сети

#4 09.03.2017 16:59:54

Re: Как запретить доступ к админке?

constb пишет:

Пользователь с ролью user при попытке пройти по /admin получает 404, но, к примеру, /admin/articles - открывается

значит на /admin/articles эта миддлварь не применяется. почему – другой вопрос. согласен с kurtkaa что миддлвари лучше назначать через группы маршрутов. скорее всего в /admin оно вбито в конструкторе контроллера, а у /admin/articles другой контроллер и у него нет добавления этой миддлвари в конструкторе

Т. е. в app/Http/Middleware нужно создать еще один класс, который будет управлять нужной ролью?

Не в сети

#5 09.03.2017 21:45:33

Re: Как запретить доступ к админке?

Может быть можно дополнить класс redirectifauthentificated

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/admin');
        }

        return $next($request);
    }

чтобы здесь была проверка на роль, и ее не пускало в админку

Не в сети

#6 10.03.2017 06:16:44

Re: Как запретить доступ к админке?

в 5.4 есть миддлварь can которая проверяет наличие у юзера указанного пермишена. я бы просто определил пермишен admin и в маршрутах на группу повесил 'middleware' => [..., 'can:admin']. вся логика проверки ролей тогда будет внутри AuthServiceProvider – \Gate::define('admin', function ($user) { /* ... */ });

подробнее про пермишены и миддлварь can – https://laravel.com/docs/5.4/authorization

Не в сети

Подвал раздела