Создать одну политику для нескольких моделей?

Vandad Zico спросил: 28 апреля 2018 в 09:29 в: php

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

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

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

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

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

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


2 ответа

Quezler ответил: 28 апреля 2018 в 09:45

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

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

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

FGDeveloper ответил: 28 апреля 2018 в 10:06

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

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

Мощный сценарий решения следующее:

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

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

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

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