В Symfony2, как обрабатывать динамический доступ / права?
Я пытаюсь найти лучший способ справиться со "сложной" системой безопасности / конфиденциальности, используя Symfony2.
Я прочитал много документации о ROLES
и ACLs
но я ищу что-то другое. Мне нужно, чтобы права были рассчитаны на основе свойств объектов.
В моем случае у меня есть User
объект и несколько других объектов (Project
, Task
, Label
, и больше...).
Мне нужно проверить, если User
может читать или писать любые объекты без сохранения прав в базе данных (например, ACL
система делает). Права должны быть "рассчитаны" исходя из соотношения между User
и данный объект.
Например, User(1)
можно написать на Task(2)
потому что он является членом Project(3)
и Task(2)
находится в Project(3)
,
Роли службы безопасности не могут справиться с этим. ACL может справиться с этим, но я не хочу хранить права в моей базе данных, потому что я знаю, что они сильно изменятся в течение срока службы продукта.
Есть ли известная хорошая практика для такого рода потребностей или я должен написать свою собственную систему?
Благодарю.
1 ответ
"что они сильно изменятся в течение срока службы продукта" -> IMO, хранение в базе данных - лучшее, и ACL - хороший способ сделать это.
В приведенном выше примере ACL были бы полезны для управления правами между Пользователем и Проектами, а права на Задачи зависят от прав этого Проекта.
Эти права будут доступны в ваших контроллерах, и вы просматриваете соответственно с помощью isGranted() и is_granted(), если вы реализуете свой собственный aclVoter: http://symfony.com/doc/current/cookbook/security/voters.html