Как в Laravel можно использовать Gate, если вы используете пользовательскую аутентификацию?
Я хотел бы использовать Gates в Laravel 8, но мы используем настраиваемую аутентификацию, поэтому Laravel не знает, какую запись пользователя $ передать в Gate. Итак, как я могу сообщить Laravel, что определенный пользователь в настоящее время вошел в систему, поэтому будет использоваться правильная запись пользователя?
Спасибо.
3 ответа
Вы могли бы использовать
forUser
метод:
Gate::forUser($user)->allows('update-post', $post);
// ^^^^^^^^^^^^^^
Проверьте этот раздел документации.
Я не знаю, выполняется ли ваш процесс проверки в файле AppServiceProvider или в контроллере.
Но я думаю, что после проверки в контроллере вы можете использовать функцию
Auth::setUser($user)
Вот что я сделал:
В
\App\Models
, Я создал класс User, который расширяет
Illuminate\Foundation\Auth\User
Я также установил защищенные свойства в этом классе
$table
а также
$primaryKey
чтобы указать имя настраиваемой таблицы и имя первичного ключа.
Затем в моем промежуточном программном обеспечении, где я проверяю, вошел ли пользователь в систему, если он или она, я запускаю это:
\Illuminate\Support\Facades\Auth::login(\App\Models\User::find($userId))
Когда я все это сделаю, я могу использовать
Auth::user()
куда хочу. Предположительно, теперь гейты будут работать без указания пользователя каждый раз.