Страница 1 из 1

Посоветуйте. Хочу написать свой AccessControl фильтр, чтобы устанавливать доступ к Экшенам с админки.

Добавлено: 2019.10.09, 05:21
b.alex
Посоветуйте. Хочу написать свой AccessControl фильтр, чтобы устанавливать доступ к Экшенам с админки.
Идея такая в behaviors каждого контролера, я буду передавать своему фильтру экшены и название контролера, а фильтр Исходя из сохраненных настроек в файле для этого контролера, будет выдавать разрешения доступа к каждому Экшену для настроенных ролей. Это в принципе я понимаю как сделать. Но вопрос стоит в другом, в админке в настройках роли хочу сделать вывод всех контролеров и их экшенов, чтобы настраивать контроль доступа к каждому экшену определенного контролера для определенной роли. Вопрос вот в чем, Как элегантно можно определять какие контролерры существуют и какие у них есть Экшены чтобы задавать им нстройки доступа. Знаю можно каждый раз при заходе в настройки роли проверять все классы в проекте и отбирать только контролеры и смотреть в них экшены., но думаю что это костыльно и должен быть другой метод.
В общем посоветуйте, как быть или накидайте примеров где такое воплощено чтобы посмотреть?
Спасибо

Re: Посоветуйте. Хочу написать свой AccessControl фильтр, чтобы устанавливать доступ к Экшенам с админки.

Добавлено: 2019.10.09, 09:35
ElisDN
Тоже делал такое.

Если есть только экшены-методы, то пройти циклом с RefrectionClass по классам контроллеров.

А универсально если есть controllerMap и экшены, подключаемые через метод actions(), то в цикле придётся создавать объект вроде $controller = Yii::$container->get($class, [$module, $name]) и к (new ReflectionObject($controller))->getMethods() добавлять array_keys($controller->actions()).

Re: Посоветуйте. Хочу написать свой AccessControl фильтр, чтобы устанавливать доступ к Экшенам с админки.

Добавлено: 2019.10.09, 10:38
b.alex
ElisDN писал(а): 2019.10.09, 09:35 Тоже делал такое.

Если есть только экшены-методы, то пройти циклом с RefrectionClass по классам контроллеров.

А универсально если есть controllerMap и экшены, подключаемые через метод actions(), то в цикле придётся создавать объект вроде $controller = Yii::$container->get($class, [$module, $name]) и к (new ReflectionObject($controller))->getMethods() добавлять array_keys($controller->actions()).
Спасибо буду пробовать