Как в 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()куда хочу. Предположительно, теперь гейты будут работать без указания пользователя каждый раз.

Другие вопросы по тегам