Как работают методы политики Laravel с одиночными аргументами? - PullRequest
0 голосов
/ 30 сентября 2019

Я прекрасно понимаю, как работают политики, когда они берут субъект и объект, например $user->can('delete', $post), который вызовет PostPolicy :: delete ($ user, $ post) для определения результата.

Что яне понимаю, как работают методы типа viewAny или create или как их тестировать. Я не могу просто сказать $user->can('create') сейчас, не так ли? Документация Laravel иногда является лабиринтом (не говоря уже об источнике), и я не нашел ничего о том, как тестировать методы политики вручную, когда они принимают только один аргумент $ user.

EDIT: Как подсказано в ответе, просто передайте имя класса. Тем не менее, он поставляется с одной ошибкой: это должно быть оригинальное имя класса, а не псевдоним, созданный с помощью class_alias(), что является обычной уловкой для тинкера. Смотрите здесь:

>>> class_alias(\App\User::class, 'U')
=> true

>>> $u->can('viewAny', \App\User::class)
=> true

>>> $u->can('viewAny', U::class)
=> false

1 Ответ

1 голос
/ 30 сентября 2019

Вместо этого вы можете передать имя класса в качестве второго аргумента, который определит, какая политика используется для авторизации. Например, если вы хотите убедиться, что используется PostPolicy, вы можете сделать следующее:

$user->can('create', App\Post::class);

Из документации Laravel:

Как обсуждалось ранее, некоторые действия, такие какcreate может не требовать экземпляра модели. В этих ситуациях вы должны передать имя класса методу авторизации. Имя класса будет использоваться для определения политики, которая будет использоваться при авторизации действия.

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