【问题标题】:Building a generic OO ACL using Doctrine使用 Doctrine 构建通用 OO ACL
【发布时间】:2011-03-17 22:31:59
【问题描述】:

我希望设计一个由原则支持的 ACL 系统供我自己使用,尽管我在一些最初的设计考虑方面遇到了困难。

现在我正在考虑根据类和唯一标识符来制作它,并将它们存储在一个表中:

Table: ACL
    ResourceClass
    ResourceKey
    RoleClass
    RoleKey
    Permission

显然,这将要求我对正在查询的类进行内省以派生正确的 ResourceClass 值。

我想知道这种方法以前是否已经使用过,或者是否有人对以更好的方式进行操作有一些建议。角色之间的递归关系等其他事情也让我感到困惑,因为我不确定如何递归查询以构建资源和 ACL。

我不是 Zend ACL 的忠实拥护者,因此请不要提出任何建议 - 我知道!

随着人们的加入,我们会进一步澄清这个问题,所以请多多包涵!这个问题本身可能需要几次迭代! ;)

【问题讨论】:

    标签: php mysql oop doctrine acl


    【解决方案1】:

    我使用 NestedSet 来存储 ACL 层次结构和缓存以加快速度。

    Doctrine ORM for PHP - NestedSet

    这是一个可能也有用的帖子:

    Zend_Acl part 3: creating and storing dynamic ACLs | CodeUtopia - The blog of Jani Hartikainen

    (也请看前两部分)。

    【讨论】:

    • 太棒了,我将不得不研究所有不同的行为。为了清楚起见,您为您的角色/组使用了 NestedSet 实现?这样您就可以获取角色/组的完整列表,然后使用所有这些键查询存储您所有权限的表?
    • 你不需要 Doctrine。 NestedSet 只是一种用于在数据库中存储树状结构的 SQL 模式。你可以随心所欲地实现它。将 ACL 存储为 NestedSet 使您能够轻松找到孩子、父母、后代等的权限。这非常适合大型 ACL 结构。对于简单的 ACL,一个数组 Zend_Config(或者序列化 ACL,如果你真的需要 db)就足够了。
    • 我对使用 zend_ACL 不感兴趣,因为它相当笨拙。我希望获得有关如何将 ACL 存储为树的更多详细信息,因为对我来说它并不是真正的数据树。而角色是。但是,我确实需要将它们存储在数据库中。这就是我使用教义的原因。
    猜你喜欢
    • 2011-11-16
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多