Создать одну политику для нескольких моделей? - PullRequest
0 голосов
/ 22 мая 2018

Я использую пакет разрешений Laravel и разрешения для обработки авторизации. У меня проблема:

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

теперь у меня есть несколько вариантов:

1- Создайте политику, но используйте ее для нескольких моделей, и я не знаю, как

2 - Создайте пользовательский класс и создайтечто-то вроде политики

какой вариант лучше?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Ваш вопрос очень, очень хороший.Мне тоже не пришлось решать ту же проблему.Я думаю, ваша проблема не решается политикой.Я думаю, что политики используются для обеспечения конфиденциальности между содержимым и его владельцем.

Вы можете решить с помощью действий / разрешений путем проверки на уровне промежуточного программного обеспечения.

Мой сценарий рекомендуемого решения следующий;

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

Сохраненные данные могут быть похожи на;

$user = ['accessible_resources' => [
   'product' => ['index','show'],
   'news'    => ['index','show','edit','store','create','update','destroy']
];

Надеюсь, мое решение вам поможет.

0 голосов
/ 22 мая 2018

1) вы можете привязать несколько моделей к одной и той же политике :

protected $policies = [
    Model1::class => WildcardPolicy::class,
    Model2::class => WildcardPolicy::class,
    Model3::class => WildcardPolicy::class,
];

2) неясно, какова ваша точная цель

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