在Symfony2中,如何处理动态访问/权限?

时间:2012-08-14 15:36:01

标签: symfony privacy

我正在尝试使用Symfony2找到处理“复杂”安全/隐私系统的最佳方法。

我阅读了很多关于ROLESACLs的文档,但我正在寻找不同的东西。 我需要根据对象的属性计算权限。

就我而言,我有一个User个对象和多个其他对象(ProjectTaskLabel等等......)。

我需要检查User是否可以读取编写任何类型的对象而不将权限存储在数据库中(例如{{1}系统正在做)。应根据ACL与给定对象之间的关系“计算”权限。

例如User可以在<{1}}上写,因为他是User(1)的成员,Task(2)位于Project(3)

安全服务的角色无法处理。 ACL可以处理它但我不想将权限存储在我的数据库中,因为我知道它们会在产品的生命周期中发生很大的变化。

是否有针对这种需求的已知良好做法,还是应该编写自己的系统?

感谢。

1 个答案:

答案 0 :(得分:1)

“他们将在产品的生命周期中改变很多” - &gt; IMO,存储在数据库中是最好的,ACL是一种很好的方法。

在上面的示例中,ACL可以很好地管理用户和项目之间的权限,而任务的权限取决于此项目权限。

如果您实施自己的aclVoter,您可以在控制器中访问这些权限,并分别使用isGranted()和is_granted()进行查看:http://symfony.com/doc/current/cookbook/security/voters.html