簡體   English   中英

Zend Navigation多個ACL角色

[英]Zend Navigation Multiple ACL roles

我正在嘗試創建一個ACL,其中用戶在不同部門中可能具有不同的角色。

根據用戶是否登錄,為用戶分配角色為role::guestrole::user的形式。這是他們的userRole (還有一個role::superuser可以訪問所有部門)。

我還以department::role的形式向ACL添加了部門角色(例如, bookings::user )。 這是他們的departmentRole

用戶部門角色存儲在Zend_Auth身份中。

訪問控制部分通過擴展Zend_AclisAllowed函數來工作。 這樣可以成功允許或拒絕每個用戶。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM