Возможно, пользуюсь каждый раз. Прежде всего помните, что ресурс, который Zend_Acl будет проверять, является произвольной сущностью (строкой), необязательно связанной с конкретным модулем или контроллером. Это может быть строка «hello», и в вашей программе вы можете проверить, может ли пользователь получить доступ к ресурсу «hello». Я часто использую произвольные ресурсы, такие как «кнопка входа в систему», «кнопка выхода из системы», чтобы показать ссылку в Zend_Navigation.
В вашем случае вы должны определить ресурс (в acl) как некоторую строку, которая может быть сопоставлена с макетом модуля / контроллера. Например, для модуля foo и панели контроллера определите ресурс «foo.bar». Затем в процедуре проверки доступа вы прочитаете имя модуля и контроллера и объедините их в строку для получения ресурса.
На практическом примере:
class Application_Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract {
...
public function preDispatch(Zend_Controller_Request_Abstract $request){
$module = $request->getModuleName();
$controller = $request->getControllerName();
$action = $request->getActionName();
...
$resource = $module . '.' . $controller; //we create the custom resource according to the model we have defined
...
$role=NULL;
if($this->_auth->hasIdentity()){
$identity = $this->_auth->getStorage()->read(); //depending on your implementation
$role = $identity->role; //depending on your implementation
}
...
if(!$this->_acl->isAllowed($role, $resource, $action)){
//deny access
}
//allow access
}
}
person
Emilio A. L.
schedule
27.09.2011