Как сохранить информацию Symfony2 "access control" в базе данных?
Я использую Symfony2, и у меня есть пользователи и роли, уже хранящиеся в моей БД. Если я установлю что-то вроде ниже в security.yml
он отлично работает:
access_control:
- { path: ^/admin, role: ROLE_ADMIN}
- { path: ^/users, role: ROLE_MANAGER}
но я хотел бы сохранить эту информацию access_control в базе данных, чтобы пользователь из моей системы мог изменить сами разрешения, используя административный интерфейс.
Я посмотрел на ACL и FOSUserBundle, но не мог найти решения для этого. Я обнаружил, что могу проверить разрешения с помощью чего-то вроде if ($user->hasRole($role))
но мне нужно было бы сделать это в каждом контроллере.
есть ли способ определить динамическую функцию "access_control"? Возможно, что-то вроде перенаправления access_control в какой-то класс, который может возвращать true или false. Есть решение?
2 ответов
лучшим способом было бы настроить определенную роль (например,DB_ROLE_CHECK
), которые вы устанавливаете в своих действиях/службах, которые вы хотите проверить на сохраненные роли базы данных.
тогда вы создадите избирателя безопасности, который зацепится за DB_ROLE_CHECK
и проверяет ваш запрос против ваших записей базы данных.
посмотреть:
- динамическое добавление ролей
- http://symfony.com/doc/current/cookbook/security/voters.html (Официальные Документы)
карта доступа построена здесь.
Если access_control не найден, ничего не делается.
теперь определите свою собственную реализацию AccessMapInterface и переопределить параметр безопасность.access_map.класс!--2--> со своим классом.
вам, вероятно, понадобится фабрика для создания AccessMap.