2014-12-03 69 views
6

我即将开始一个需要几种不同“权力”的用户的项目。Symfony2授权:Voters VS. ACL

为了给我一点上下文,我期待在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相关的东西?

回答

7

你可能应该在你的情况下使用选民。华沙的SymfonyCon在2013年有相当好的谈论 - https://www.youtube.com/watch?v=e7HfW4TgnUY

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

2)它不是PERFOMANCE明智的可能,但你应该测量和轮廓首先以某种方式(在一些博客文章共享导致这可能是非常有趣的)

3)当然可以。与Symfony 1.2相关?你的意思是Symfony 2.1?你可以在packagist看到FOSUser支持所有当前版本的symfony :)

+0

谢谢!从视频中可以清楚地看到,角色选民是要走的路; – 2014-12-05 22:30:11

+0

关于你的评论3)我的意思是1.2(你可以在github上阅读(https://github.com/FriendsOfSymfony/FOSUserBundle)以下“谨慎:该软件包是与symfony的仓库同步开发的,对于Symfony 2.0.x,您需要使用软件包(或更低版本)的1.2.0版本“。我必须详细检查您在问题3中提供的链接,它似乎确实是用户捆绑的更新版本。 – 2014-12-05 22:38:34

+0

我实现了FOSUserBundle,确实像一个魅力,感谢提示@ I3I0! – 2014-12-17 15:23:01