В 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

Другие вопросы по тегам