[英]Zend Navigation Multiple ACL roles
我正在嘗試創建一個ACL,其中用戶在不同部門中可能具有不同的角色。
根據用戶是否登錄,為用戶分配角色為role::guest
或role::user
的形式。這是他們的userRole
。 (還有一個role::superuser
可以訪問所有部門)。
我還以department::role
的形式向ACL添加了部門角色(例如, bookings::user
)。 這是他們的departmentRole
。
用戶部門角色存儲在Zend_Auth
身份中。
訪問控制部分通過擴展Zend_Acl
並isAllowed
函數來工作。 這樣可以成功允許或拒絕每個用戶。
public function isAllowed($role = null, $resource = null, $privilege = null)
{
$identity = Zend_Auth::getInstance()->getIdentity();
$userRole = $identity->role;
$departmentRoles = $identity->departmentRoles;
if (parent::isAllowed($userRole, $resource, $privilege))
{
return parent::isAllowed($userRole, $resource, $privilege);
}
else {
foreach ($departmentRoles as $departmentRole)
{
if(parent::isAllowed($departmentRole, $resource, $privilege))
{
return true;
}
}
}
return false;
}
我遇到的問題是Zend_Navigation
需要Acl的實例和單個用戶角色。 我的構建導航菜單的視圖腳本使用$this->navigation()->accept($page)
,它僅針對單個用戶角色進行驗證。
如何為每個用戶擁有多個Acl角色,並讓他們可以訪問Zend_Navigation顯示菜單項?
如果對此有更好/不同/正確的方法,請分享。
謝謝
編輯:
這種方法意味着要在isAllowed()
使用核心函數,這一事實使我認為這不是實現此目的的正確方法。
現在,在我的ACL模型中,我獲取了所有用戶,部門和關聯,並為每個用戶創建了一個數組,這些數組由他們在相關部門中的各種角色組成。 然后,我為每個用戶創建一個角色,並繼承先前創建的數組中的角色。
到現在為止,這種方法運行良好,也意味着我還可以將用戶添加為資源,並允許相關的管理員和部門經理修改其詳細信息等。
這也意味着我可以將一個角色傳遞給Zend_Navigation,並且菜單結構應與其部門角色相關。
IMHO對單個用戶具有多個ACL角色看起來像反模式。 Zend_Navigation規則綁定到(多個)資源以實現單個角色,這很合理。 有哪些約束條件使您無法為(部門)角色分配資源? 您始終可以將繼承用於ACL角色。
如果您希望為單個用戶擁有多個角色,則可能需要具有單獨的ACL規則。
Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl);
Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($role);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.