Yii2. RBAC и фильтрация/ограничения на уровне записей. Как лучше реализовать?
Салют! Реализую рест сервис. Есть базовый контроллер отнаследованный от ActiveController от которого наследуются потомки. В базовом контроллере, общая логика, в потомках - кастомизация. Плюс настроен RBAC.
Стоит бизнес-задача "В паре списков сущностей owner может видеть/редактировать только свои сущности". С редактированием вроде все понятно. Но каким способом резать вывод данных по GET /items я не понимаю. Есть несколько вариантов, но они либо к перегрузке основного IndexAction приводят (или дата провайдера), либо к сложным костылям которые потом вспотеешь сопровождать. И в идеале рулить этим через логику RBAC. Что посоветуете коллеги (кроме RTFM ))? Или может где на гитхабе пример кода есть.
В Rbac есть сущность \yii\rbac\rule.
Это класс, который имеет абстрактный метод execute(), который, будучи реализованным в классе потомке позволит реализовать любую логику проверки.
Реализуете такой класс, цепляете его к разрешению, профит.
эт все понятно. Куда его и в виде чего привинчивать? поведение, фильтр, в базовый или дочерний контроллер/экшен вписывать логику?Так в лоб rules только запрещают или разрешают а как в фильтрациях списков его использовать? Вот суть вопроса)
Этот готовит провайдер только для GET items/. Можете унаследовать дефолтные экшены rest api, добавив в них проверку прав, а потом вернув родительский action. Как только это сделаете, создаете базовый контроллер от ActiveController , в котором переопределяете actions(), и, по идее, дело в шляпе.