2010-08-13 51 views
1

是否可以根據Zend Framework應用程序中的動態元素爲用戶分配單獨的權限?Zend_ACL基於用戶的動態權限

我有像這樣的表:

clients (id, name, contact_name, contact_number, logo, active) 
modules (id, client_id, module_id, active) 
permissions (id, user_id, client_id, module_id) 
users (id, username, password, email, realname) 

我需要做的是允許特定用戶訪問特定的模塊,每個客戶,但我想不出任何辦法讓Zend_Acl把做這個。什麼是最有效的方法?

編輯:道歉,我忘了添加一個細節。我必須允許管理員在管理界面中授予和撤銷用戶的權限。

+0

是的,當然是有可能的。 Zend_Acl非常靈活。您可以從數據庫,xml文件或任何您想要的內容中獲取用戶角色和權限。你甚至可以對它們進行硬編碼,但這並不常見。 – 2011-02-02 12:55:29

回答

0

背後的ACL的基本框架,例如可以是這樣的

$acl = new Zend_Acl(); 

// allow user with ID 1 access reports section for client with ID 4 
$acl->allow(
    new Zend_Acl_Role('user_1'), 
    new Zend_Acl_Resource('reports'), 
    'client_4' 
); 

// allow administrator access reports module for all clients 
$acl->allow(
    new Zend_Acl_Role('administrator'), 
    'reports' 
); 

等等...
它幾乎完全取決於你,你更喜歡哪一種風格。 Zend_Acl非常靈活,我同意這本手冊可以用更多的例子和最佳實踐來編寫,但最終不是很難自己弄清楚。

+0

有沒有辦法從MySQL後端(或模型)加載? – Ben 2010-08-14 16:29:03

+0

由於ACL的邏輯與應用程序不同,Zend_Acl不直接支持從數據庫加載數據。你應該分兩步進行 - a)從db加載數據; b)解析數據並填充Zend_Acl。這不是一個錯誤交易。 – 2010-08-14 19:31:19

1

讓我們回到這個話題,完成它很好,而且在實現中有點困難。 讓我們瞭解我們的問題: 本:我不知道你的項目是怎麼回事,但讓我們創建一個類似的場景, 我們有一個網站供客人,客戶,管理員使用: 我們需要一張桌子在我們的數據庫中保存的角色名,併爲每個角色也都有其權限

Roles (idRole, nameRole) 
Permissions (We will speak about it later) 

比方說,可能是過去了,我們需要爲我們的應用程序設置多個角色,所以我們將設置一個管理員爲每個角色分配權限的頁面(如Drupal和Joomla),其中一個解決方案是查找您擁有的所有模塊應用程序,然後獲取每個模塊的控制器以及每個控制器的操作。 然後我們必須告訴Zend_Acl從數據庫中的角色表中設置我們的角色,並且資源是每個控制器的Zend Modules-> Actions。 所以我們需要,一個表來存儲所有的模塊,並且每個模塊中,我們將需要控制器和行動

Modules (idModule, nameModule) 
Controllers (idController, nameController, idModule_FK) 
Actions (idAction, nameAction, descriptionAction, idController_FK) 

描述字段將從動作描述例如把它

/** 
* @description := Action to edit Roles 
**/ 
public function editAction {} 

所以,現在讓我們來完成我們的數據庫結構

Roles (idRole, nameRole) 
Permission (idRole, allowedPermission, idAction, dateTimeAssigned) 
Modules (idModule, nameModule) 
Controllers (idController, nameController, idModule_FK) 
Actions (idAction, nameAction, descriptionAction, idController_FK) 

這是一個普遍的結構,我能找到的到現在爲止,我試圖找回所有模塊/控制器/動作,什麼時候會做,我將它張貼回到這裏(插件類),那麼我們將嘗試一起移動(爲其他人貢獻)來使用Zend_Acl Dynamic來處理這個問題。

下一步:創建於Library/App/Action/Helper一個插件,如果它是由一個人請回來後要了解有一般的貢獻, 然後,我們將重點放在節約使用Doctrine ORM與我們的Zend項目, 3日的數據進行步驟是創建一個Controller,它根據數據庫信息(Role,Permissions,Actions)動態地創建Zend_Acl。

任何建議/想法/建議,這裏應該繼續下去,直到完成。

親切的問候,

+0

我真的不知道這是答案還是問題。 – LittleBobbyTables 2012-11-30 17:00:16