/** * Short description of method remove * * @access public * @author Jehan Bihin, <*****@*****.**> * @param string roleUri * @param string accessUri * @return mixed */ public function remove($roleUri, $accessUri) { $uri = explode('#', $accessUri); list($type, $ext, $mod, $act) = explode('_', $uri[1]); $role = new core_kernel_classes_Class($roleUri); $actionAccessProperty = new core_kernel_classes_Property(funcAcl_models_classes_AccessService::PROPERTY_ACL_GRANTACCESS); $module = new core_kernel_classes_Resource($this->makeEMAUri($ext, $mod)); $controllerClassName = funcAcl_helpers_Map::getControllerFromUri($module->getUri()); // access via controller? $controllerAccess = funcAcl_helpers_Cache::getControllerAccess($controllerClassName); if (in_array($roleUri, $controllerAccess['module'])) { // remove access to controller funcAcl_models_classes_ModuleAccessService::singleton()->remove($roleUri, $module->getUri()); // add access to all other actions foreach (funcAcl_helpers_Model::getActions($module) as $action) { if ($action->getUri() != $accessUri) { $this->add($roleUri, $action->getUri()); $this->getEventManager()->trigger(new AccessRightAddedEvent($roleUri, $action->getUri())); } } } elseif (isset($controllerAccess['actions'][$act]) && in_array($roleUri, $controllerAccess['actions'][$act])) { // remove action only $role->removePropertyValues($actionAccessProperty, array('pattern' => $accessUri)); $this->getEventManager()->trigger(new AccessRightRemovedEvent($roleUri, $accessUri)); funcAcl_helpers_Cache::flushControllerAccess($controllerClassName); } }