Laravel Гейтс, как их использовать в маршруте API? - PullRequest
1 голос
/ 08 апреля 2020

Я определяю свои Gates для моей службы API в AuthServiceProvider (следуя Laravel документам https://laravel.com/docs/7.x/authorization#gates):

Gate::define('view-users', function ($user) {
   return $user->hasAccess(['view-users'])
   or $user->inRole(['admin', 'operator']);
});

Вот мой маршрут:

Route::group(['namespace' => 'Api', 'middleware' => ['auth:api']], function () {
        Route::get('/users', 'UserController@listing')->name('user.listing')->middleware(['can:view-users']);
});

Как мне найти пользователя из файла Route API для использования в Gate?

Но я не совсем понимаю, откуда это $user. В моем запросе я отправляю токен Авторизации на предъявителя. Должен ли я использовать это в моих воротах, чтобы выбрать правильного пользователя из БД? Откуда Laravel знает, кто такой $user?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

$user - текущий зарегистрированный пользователь. Вам не нужно предоставлять дополнительные $user, или передавать пользователя.

Так что, если в вашем приложении уже есть пользователь для входа, это будет тот. Если логин отсутствует, шлюз вернет false, что защищает ваши ресурсы.

0 голосов
/ 08 апреля 2020

Laravel не знает, кто такой $user. Вы должны передать его, когда используете Gate. Если вы передадите Auth::user() в качестве первого аргумента Gate, который вы используете, написанный вами код будет работать. В других случаях вам нужно будет извлечь user из базы данных с любым заданным вводом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...