【问题标题】:Symfony2 Authorization: Voters Vs. ACLSymfony2 授权:选民与。访问控制列表
【发布时间】:2015-02-01 14:41:15
【问题描述】:

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

为了提供一些背景信息,我预计会有 1000 到 10000 个用户。

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

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

一位用户可能需要查看其公司“A”管理的所有项目的概览。 另一个只是“B”公司之一。 另一个只是项目“A”。 某些用户可能会在每个级别上获得更细粒度的详细信息(可能用户在“B”级别上具有细粒度级别,但在“A”级别上看不到任何内容)。 有些用户可能只有读取权限,有些用户可以读取和修改,有些用户可以读取、修改和创建。

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

我必须在相对简单的 Voters 系统或成熟的 ACL 之间做出选择。我注意到 ACL 的文档并没有那么完善,尽管它看起来非常强大。 我几乎抛弃了选民,但后来我读了this article,这让我改变了主意。引用文章:

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

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

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

考虑到我所公开的背景,以下是我的问题:

1) 投票者选项能否提供我需要的所有灵活性?

2) 在性能方面还可以(ACL 特别指出,即使有数百万个对象也没有性能衰减,我对 Voters 表示怀疑)

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

【问题讨论】:

    标签: security symfony authorization multi-user


    【解决方案1】:

    您可能应该在您的情况下使用选民。 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 :)

    【讨论】:

    • 谢谢!从视频中可以清楚地看出角色选民是要走的路;)
    • 关于您的评论 3) 我的意思是 1.2(您可以在 github (github.com/FriendsOfSymfony/FOSUserBundle) 上阅读以下内容“警告:此捆绑包是与 symfony 的存储库同步开发的。对于 Symfony 2.0.x,您需要使用捆绑包的 1.2.0 版本(或更低版本)”。我将不得不详细检查您在问题 3 中提供的链接,它似乎确实是用户捆绑包的更新版本。
    • 我实现了 FOSUserBundle 并且确实像魅力一样工作,感谢@I3I0 的提示!
    猜你喜欢
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多