Как сохранить информацию 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 и проверяет ваш запрос против ваших записей базы данных.

посмотреть:


карта доступа построена здесь.

Если access_control не найден, ничего не делается.

теперь определите свою собственную реализацию AccessMapInterface и переопределить параметр безопасность.access_map.класс!--2--> со своим классом.

вам, вероятно, понадобится фабрика для создания AccessMap.