我正在尝试使用Symfony2找到处理“复杂”安全/隐私系统的最佳方法。
我阅读了很多关于ROLES
和ACLs
的文档,但我正在寻找不同的东西。
我需要根据对象的属性计算权限。
就我而言,我有一个User
个对象和多个其他对象(Project
,Task
,Label
等等......)。
我需要检查User
是否可以读取或编写任何类型的对象而不将权限存储在数据库中(例如{{1}系统正在做)。应根据ACL
与给定对象之间的关系“计算”权限。
例如User
可以在<{1}}上写,因为他是User(1)
的成员,Task(2)
位于Project(3)
。
安全服务的角色无法处理。 ACL可以处理它但我不想将权限存储在我的数据库中,因为我知道它们会在产品的生命周期中发生很大的变化。
是否有针对这种需求的已知良好做法,还是应该编写自己的系统?
感谢。
答案 0 :(得分:1)
“他们将在产品的生命周期中改变很多” - &gt; IMO,存储在数据库中是最好的,ACL是一种很好的方法。
在上面的示例中,ACL可以很好地管理用户和项目之间的权限,而任务的权限取决于此项目权限。
如果您实施自己的aclVoter,您可以在控制器中访问这些权限,并分别使用isGranted()和is_granted()进行查看:http://symfony.com/doc/current/cookbook/security/voters.html