我正在使用ZF 1.12.2,並且我想爲我的Zend_Acl特權創建一個黑名單,因爲我的限制比允許的要少。我將我的ACL資源名稱放在我的控制器名稱和我的控制器操作名稱上的特權上。如何在Zend_Acl中允許不存在的特權?
現在,我拒絕權限是這樣的:
$acl->deny('user', null, 'User::login');
正如我添加動作我的用戶控制,我想用戶角色隱式地被授予訪問它們,除非我明確地拒絕他們。所以,如果我在我的用戶控制器添加一個編輯動作,我沒有做到這一點:
$acl->allow('user', null, 'User::edit');
默認情況下,Zend_Acl::isAllowed
返回false如果特權不存在。我很難知道哪些特權已被添加,除非我在調用父項之前將它們分類並存儲。我一直試圖破譯Zend_Acl::$_rules
,因爲我認爲它適合我的需求,我可以避免子類化。允許不存在的特權通過Zend_Acl::isAllowed
可能嗎?
更新:現在,我的工作子類方法My_Acl::isAllowed
下面。 My_Acl::__construct
接受由添加了嵌套特權/資源的角色組成的陣列配置。
public function isAllowed($role = null, $resource = null, $privilege = null)
{
if (null !== $resource) {
if (is_string($resource)) {
$resource_id = $resource;
} else {
$resource_id = $resource->getResourceId();
}
if (!in_array($resource_id, array_keys($this->_resources))) {
return true;
}
}
if (null !== $privilege) {
if (!in_array($privilege, array_keys($this->_privileges))) {
return true;
}
}
return parent::isAllowed($role, $resource, $privilege);
}
你可以將代碼添加插件,你正在檢查訪問。 'controller :: action'這個部分基本上。 – 2013-03-25 12:15:45
@roko新增了我的重寫isAllowed方法 – danronmoon 2013-03-25 13:04:23