Автоопределение политики Laravel - PullRequest
0 голосов
/ 26 мая 2019

сегодня я создавал страницу профиля пользователя USER, с которой он управлял в ProfileController возвращая просмотры на страницу профиля, настройки профиля и т. Д.

поэтому я решил сделать некоторые правила политики для редактирования профиля и т. Д.

поэтому я обнаружил, что должен использовать Middleware / Gates / Policy, основанный на Laravel Doc. Я выбрал Policy, потому что страница профиля общедоступна, но автор может редактировать только определенную ее часть, поэтому мне нужно @can

Итак, мои шаги:

  1. php artisan make:policy ProfilePolicy (без модели)
  2. Зарегистрированный полис на AuthServiceProvider в $policies собственности
  3. написанные методы, такие как edit inside ProfilePolicy

затем я начал думать, как определить его для моего контроллера, хм, документация мне не помогает: /

поэтому я попробовал метод @can('edit', $user) blade, и он сработал, но КАК ?, как определить конкретную политику для одного контроллера? (не модель), как определить несколько политик для одного контроллера

Я заблудился, как Laravel Magic сделал это, возможно, из-за Нейминга? ProfileController => ProfilePolicy?

1 Ответ

0 голосов
/ 26 мая 2019

В контроллере вы можете написать это

public function edit(Profile $profile) {
   $this->authorize('edit', $profile)
}

Laravel делает это:

  • Проверьте тип $profile, и это Profile::class
  • Проверка политик, зарегистрированных для этого класса (ваш шаг 2)
  • Ищет метод edit в этой политике, если он не найден, возвращает false, означающее, что пользователь не авторизован
  • Выполняет функцию edit(), которая возвращает истину / ложь

В лезвии директива @can делает то же самое.

Политики предназначены для привязки к моделям, это удобный способ написания правил для обработки отдельных моделей, но их можно запускать разными способами (например, метод authorize() в контроллерах и директива @can в блейде).

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