2010-02-03 57 views
1

我正在研究一個Web應用程序,其中不同的用戶組對 資源有不同的訪問權限。到目前爲止,我猜想沒有什麼特別的,但有一個警告; 該應用程序分爲「域」,以便我們的每個客戶組織 都有自己的內容。在這裏,我使用一個更簡單的模型來說明我的問題。如何在ACL中表示不同的應用程序域?

每個域都有 相同的資源類型,但每個資源實例僅連接到一個域。 下面是它看起來就像一個域名:

Resources: stories, announcements 

Roles: 
    guest // read only access 
    root // unlimited access 
    editor // like guest, but with r/w access to resource "stories" 
    admin // r/w access to both resources 

我想出了兩種不同的方法來實現這個使用Zend_Acl中, 第一是簡單地使用不同的ACL爲不同的域,複製上述 爲每個域。二是隻使用一個ACL,並添加新的角色,每個域:

Domains: domain0, domain1, domain2 

Roles: 
    guest 
    root 
    editor-domain0 
    editor-domain1 
    editor-domain2 
    admin-domain0 
    admin-domain1 
    admin-domain2 

第二種方法的優點是用戶可以是一個域的管理員,同時 是另一個編輯器(實際上可能發生)。但它也有缺點 ,角色不是靜態的 - 我們需要每次添加或刪除域時生成。

這些方法中的任何一種都不錯,還是有更好的方法來處理多個域?

回答

0

另一個解決方案可能是子類Zend_Acl,更具體地說,方法'允許'和'拒絕'。

allow($role, $action, $resource, $domain) { 
// parent::allow($role . '-' . $domain, $action, $resource); 
} 

這不是那麼簡單的,但你的想法。

我不確定你的資源實例是什麼意思,但我會建議它:'resource-domain',例如allow('admin','action','story-domain0')。

+0

我已經使用了這個答案的變種;但是不是繼承Zend_Acl的子類,而是在另一個調用了Zend_Acl中相應方法的類中創建了具有相同簽名的實用程序方法。 – 2010-02-09 10:23:15

相關問題