/** * */ public function buildAcl() { if (is_null($this->acl)) { $this->acl = new Zend_Acl(); } $this->acl->removeAll(); $permissions = $this->getPermissionList(); $resources = $this->getResourceList(); $resourceParents = $this->getResourceParentList(); $roles = $this->getRoleList(); $roleParents = $this->getRoleParentList(); $rolesTmp = array(); foreach ($roles as $role) { $roleId = $role['role_id']; $roleName = $role['role_name']; $rolesTmp[$roleId] = array('name' => $roleId, 'parents' => array()); $rolesTmp[$roleName] = array('name' => $roleName, 'parents' => array($roleId)); } foreach ($roleParents as $roleParent) { $roleId = $roleParent['role_id']; $roleIdParent = $roleParent['role_id_parent']; $rolesTmp[$roleId]['parents'][] = $roleIdParent; } foreach ($rolesTmp as $role) { $this->acl->addRole($role['name'], $role['parents']); } #echo '<pre>'; $resourcesTmp = array(); foreach ($resources as $resource) { $resourceId = $resource['resource_id']; $resourceName = $resource['resource_name']; $resourcesTmp[$resourceId] = array('name' => $resourceId, 'parent' => null); $resourcesTmp[$resourceName] = array('name' => $resourceName, 'parent' => $resourceId); } foreach ($resourceParents as $resourceParent) { $resourceId = $resourceParent['resource_id']; $resourceIdParent = $resourceParent['resource_id_parent']; $resourcesTmp[$resourceId]['parent'] = $resourceIdParent; } foreach ($resourcesTmp as $resource) { $this->acl->addResource($resource['name'], $resource['parent']); } foreach ($permissions as $permission) { if (empty($permission['allowed'])) { $this->acl->deny($permission['role_id'], $permission['resource_id']); } else { $this->acl->allow($permission['role_id'], $permission['resource_id']); } } }
/** * Ensures that removal of all Resources results in Resource-specific rules being removed * * @return void */ public function testRulesResourceRemoveAll() { $this->_acl->add(new Zend_Acl_Resource('area'))->allow(null, 'area'); $this->assertTrue($this->_acl->isAllowed(null, 'area')); $this->_acl->removeAll(); try { $this->_acl->isAllowed(null, 'area'); $this->fail('Expected Zend_Acl_Exception not thrown upon isAllowed() on non-existent Resource'); } catch (Zend_Acl_Exception $e) { $this->assertContains('not found', $e->getMessage()); } $this->_acl->add(new Zend_Acl_Resource('area')); $this->assertFalse($this->_acl->isAllowed(null, 'area')); }
/** * Prüft, ob schon überprüft wurde, ob es etwas zu cachen gibt, und holt * dies im Zweifallsfall nach. * @return Dkplus_Acl_Adaptable */ protected function _checkCaching() { if (!$this->_cachingCalled) { if ($this->hasCachingAdapter()) { $changes = $this->_getCachingAdapter()->getChanges(); foreach ($changes as $change) { //Role und Resource wurden geändert (Regeländerung) if (!is_null($change['role']) and !is_null($change['resource'])) { if ($this->hasLoaded($change['role'], $change['resource'])) { $this->_setUnloaded($change['role'], $change['resource']); } } elseif (!is_null($change['role'])) { if ($this->hasRoleLoaded($change['role'])) { $this->_loaded = array(); $this->_loadedResources = array(); $this->_loadedRoles = array(); parent::removeAll(); parent::removeRoleAll(); } } elseif (!is_null($change['resource'])) { if ($this->hasResourceLoaded($change['resource'])) { $this->_loaded = array(); $this->_loadedResources = array(); $this->_loadedRoles = array(); parent::removeAll(); parent::removeRoleAll(); } } } } } $this->_cachingCalled = true; return $this; }