2010-03-15 39 views
3

我正在使用Zend_Navigation並試圖將它與Zend_Acl進行整合。導航中的每個頁面都有一個privilege屬性。我無法確定的是如何爲單個頁面定義多個權限。給Zend導航頁面多個ACL權限

使用案例:用於管理用戶的頁面。如果當前登錄用戶的角色在Users資源上具有addeditdelete權限,我想要顯示該頁面(在導航中)。

實施例條目在導航XML:

<admin_users> 
    <label>Users</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <privilege>add,edit,delete</privilege> 
</admin_users> 

使用如上述以逗號分隔的列表中不借給所需的行爲。


UPDATE

通過代碼挖後,我發現,Zend_Navigation_Page只允許一個單一的字符串值。有沒有人擴展這個類或找到另一種解決這個限制的方法?

/** 
* Sets ACL privilege associated with this page 
* 
* @param string|null $privilege [optional] ACL privilege to associate 
*         with this page. Default is null, which 
*         sets no privilege. 
* @return Zend_Navigation_Page fluent interface, returns self 
*/ 
public function setPrivilege($privilege = null) 
{ 
    $this->_privilege = is_string($privilege) ? $privilege : null; 
    return $this; 
} 

回答

2

我意識到我的問題是我缺少'view'類型的權限。當我加載資源特權時,如果用戶具有該資源的任何特權,我現在授予該資源的「管理員」特權。然後,我使用頁面上的'管理員'權限。

<admin_users> 
    <label>Users</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <privilege>admin</privilege> 
</admin_users> 
-2

您是否嘗試過以下方法?我不確定它是否可行,但我有一種感覺。

<admin_users> 
<label>Users</label> 
<route>default</route> 
<controller>admin</controller> 
<action>users</action> 
<resource>Users</resource> 
<privilege>add</privilege> 
<privilege>edit</privilege> 
<privilege>delete</privilege> 

+0

我試過了,即使用戶擁有該資源的所有權限,也無法正常工作。 – Sonny 2010-03-16 18:40:59

0

可能需要某種嵌套的傳遞特權作爲數組:

<admin_users> 
    <label>Users</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <privilege> 
     <add>add</add> 
     <edit>edit</edit> 
    </privilege> 
</admin_users> 

編輯:

常識告訴一個鏈接應指向一個動作。您可以將<params>節點添加到菜單中。

<admin_users_edit> 
    <label>Users edit</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <params> 
     <do>edit</do> 
    </params> 
    <privilege> 
     <edit>edit</edit> 
    </privilege> 
</admin_users_edit> 


<admin_users_delete> 
    <label>Users delete</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <params> 
     <do>delete</do> 
    </params> 
    <privilege> 
     <edit>delete</edit> 
    </privilege> 
</admin_users_delete> 
+0

我通過代碼挖掘並發現'Zend_Navigation_Page'只允許一個字符串值。我正在更新我的帖子以反映這一點。 – Sonny 2010-04-29 14:33:22

+0

我不確定我明白你在這裏展示的是什麼。我的具體情況是顯示記錄的列表頁面。如果當前用戶可以添加,編輯或刪除,他們應該能夠看到該頁面,否則不能。 – Sonny 2010-04-30 15:13:21