Как я могу расширить аутентификацию, встроенную в Laravel, для обработки авторизации в конструкторах контроллеров?

У меня есть приложение Laravel, использующее встроенную базовую аутентификацию Laravel, но помимо возможности аутентифицировать пользователей, мне также нужно иметь возможность делать такие вещи, как проверка разрешений и авторизация их для заданных действий контроллера, а также такие вещи, как проверка поддомен сайта, на котором находится пользователь, и разрешить им доступ или нет соответственно.

Для авторизации я наткнулся на Spatie, смог настроить и заставить его работать. Кажется, все в порядке. Однако я не уверен, как лучше всего интегрировать его в мои контроллеры.

Если возможно, я хотел бы проверить разрешения Spatie в конструкторах контроллера и соответственно заблокировать доступ, а не проверять авторизацию в каждом действии контроллера. Есть ли хороший способ сделать это в Laravel? Как я могу либо указать пользователю на представление несанкционированного доступа, либо перенаправить его на экран входа в систему и т. д. из конструктора контроллера?

Точно так же, если пользователь пытается выполнить действие, которое недопустимо для данного поддомена, как я могу заблокировать его/перенаправить из конструктора? Спасибо.


person HartleySan    schedule 04.03.2019    source источник
comment
Изучите промежуточное ПО; вы можете обернуть несколько маршрутов (привязанных к контроллерам) и обработать эту проверку задолго до того, как она попадет в конструктор контроллера.   -  person Tim Lewis    schedule 04.03.2019
comment
Спасибо, Тим. Это действительно помогает мне двигаться в правильном направлении. Итак, размышляя об этом подробнее, хотел бы я создать новое промежуточное программное обеспечение, которое выполняет все проверки Spatie и субдоменов и соответствующим образом перенаправляет пользователя? Могу ли я получить доступ к auth()->user() из промежуточного программного обеспечения? Спасибо.   -  person HartleySan    schedule 04.03.2019
comment
Точно :) Я использую что-то похожее под названием Sentinel, у которого есть Sentinel::getUser(), который на 100% доступен из любого промежуточного ПО. То же самое относится и к Spatie (лично с ним не работал, но должно быть похоже).   -  person Tim Lewis    schedule 04.03.2019
comment
Это сработает. Большое спасибо.   -  person HartleySan    schedule 04.03.2019


Ответы (1)


Промежуточное программное обеспечение - это то, что нужно... Вы можете использовать его в конструкторе вашего контроллера или в маршруте.

https://laravel.com/docs/5.7/middleware

person xyLuz    schedule 04.03.2019
comment
Спасибо за помощь, xyLuz. - person HartleySan; 04.03.2019