Symfony2授权:选民与比赛。 ACL

时间:2014-12-03 21:17:58

标签: security symfony authorization multi-user

我即将开始一个项目,需要几种具有不同“权力”的用户。

为了给出一些上下文,我期待1000到10000个用户。

我至少有3个“层”:A,B,C

“A”可以是“咨询公司”,每个公司都有不同的客户“B”,每个客户都有几个项目“C”。

一个用户可能需要查看其公司“A”管理的所有项目的概述。 另一个只是其中一个公司“B”。 另一个项目“A”。 某些用户可能会在每个级别上被授予更细粒度的细节(可能用户在“B”级别上具有细粒度级别,但在“A”级别上看不到任何内容)。 有些用户可能只有读权限,有些用户可以阅读和修改,有些用户可以阅读,修改和创建。

最后,我可能会得到100000或100万个“对象”,我必须向其授予读/写/删除/修改权限。

我必须在相对简单的选民系统或完整的ACL之间做出选择。虽然看起来非常强大,但我注意到ACL并没有很好地记录在案。 我几乎丢弃了选民,但后来我读了this article这让我改变主意。引用文章:

  

这通常是您在谈论ACL时的想法:能够说“此用户”可以“编辑”某些“对象”。在Symfony2中,您可以利用自定义选民来使用您拥有的任何复杂业务逻辑来确定这一点。

根据文章,您可以将选民用作:

  

isGranted的另一个常见未知属性是第二个参数,它是任何类型的“对象”

所以这是我的问题,考虑到我所暴露的背景:

1)选民选项是否会授予我所需的所有灵活性?

2)性能明智(ACL特别指出即使有数百万个物体也没有性能衰退,我对选民产生怀疑)

3)如果我选择选民,我可以安全地使用FOSUserBundle,尽管指定了与Symfony 1.2相关的内容吗?

1 个答案:

答案 0 :(得分:7)

你可能应该在你的情况下使用选民。 2013年在华沙的SymfonyCon进行了很好的讨论 - https://www.youtube.com/watch?v=e7HfW4TgnUY

1)选民将获得您需要的所有灵活性。您将选民注册为服务(link),以便您可以传递给选民EntityManager,Doctrine Registry,EntityRepository或您想要的任何服务。

2)这可能不是性能,但你应该先测量并分析它(并在一些博客文章中分享,因为这可能非常有趣)

3)当然可以。发布Symfony 1.2?你是说Symfony 2.1吗?您可以在packagist看到FOSUser支持所有当前版本的symfony:)