2010-07-19 9 views
4

雖然我正在努力解決一些初始設計問題,但我正在設計一個支持學習的ACL系統供我自己使用。使用Doctrine構建一個通用的OO ACL

現在,我看着使其成爲基於類和唯一的標識符,在表中存儲它們的方式:

Table: ACL 
    ResourceClass 
    ResourceKey 
    RoleClass 
    RoleKey 
    Permission 

顯然,這是怎麼回事,要求我反思對被查詢類導出正確的ResourceClass值。

我想知道如果這種做法之前已經完成,或者如果任何人有一些建議,以更好的方式做。其他事情,如角色之間的遞歸關係也混淆了我,因爲我不確定如何遞歸查詢構建和資源的ACL。

我不是Zend ACL的巨大粉絲,所以請不要對此提出建議 - 我意識到這一點!

當人們稱重時,會對這個問題做進一步的說明,請耐心等待!這個問題本身可能需要一些迭代! ;)

回答

3

我使用NestedSet來存儲ACL層次結構和緩存來加快速度。

Doctrine ORM for PHP - NestedSet

下面是這可能是太有用帖子:

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

(看看前面兩個部分爲好)。

+0

太棒了,我將不得不考慮所有不同的行爲。 爲了清楚起見,您使用了NestedSet實現爲您的角色/組?這樣你可以獲得完整的角色/組列表,然後查詢存儲所有這些密鑰的所有權限的表? – 2010-07-20 21:12:27

+0

你不需要這樣的教義。 NestedSet只是用於在數據庫中存儲樹狀結構的SQL模式。您可以隨意使用它。將ACL作爲NestedSet進行存儲,可以輕鬆找到兒童,父母,上級等的權限。這對於大型ACL結構非常適合。對於簡單的ACL,數組Zend_Config(或者序列化ACL,如果你確實需要db)就足夠了。 – takeshin 2010-07-21 06:46:49

+0

我對使用zend_ACL不感興趣,因爲它很笨拙。我希望獲得更多關於如何將ACL存儲爲樹的細節,但對我而言,它並不是真正的數據樹。而角色是。 但是我確實需要將它們存儲在數據庫中。這就是我使用教義的原因。 – 2010-07-21 12:13:28