/** * Init */ public function init(ModuleManagerInterface $moduleManager) { // get service manager $this->serviceLocator = $moduleManager->getEvent()->getParam('ServiceManager'); $moduleManager->getEventManager()->attach(ModuleEvent::EVENT_LOAD_MODULES_POST, [$this, 'initApplication']); $eventManager = AclEvent::getEventManager(); $eventManager->attach(AclEvent::DELETE_ROLE, function ($e) use($moduleManager) { $userModel = $moduleManager->getEvent()->getParam('ServiceManager')->get('Application\\Model\\ModelManager')->getInstance('User\\Model\\UserBase'); // change the empty role with the default role $userModel->updateUsersWithEmptyRoles(AclBaseModel::DEFAULT_ROLE_MEMBER); }, -100); }
/** * Init * * @param \Zend\ModuleManager\ModuleManagerInterface $moduleManager * @return void */ public function init(ModuleManagerInterface $moduleManager) { // get service manager $this->serviceLocator = $moduleManager->getEvent()->getParam('ServiceManager'); // clear cache $eventManager = AclEvent::getEventManager(); $eventManager->attach(AclEvent::DELETE_ROLE, function () { PageCacheUtility::clearPageCache(); }); // clear cache $eventManager = LocalizationEvent::getEventManager(); $eventManager->attach(LocalizationEvent::UNINSTALL, function () { PageCacheUtility::clearPageCache(); }); }
/** * Delete role * * @param integer $roleId * @return boolean|string */ public function deleteRole($roleId) { try { $this->adapter->getDriver()->getConnection()->beginTransaction(); $delete = $this->delete()->from('acl_role')->where(['type' => self::ROLE_TYPE_CUSTOM, 'id' => $roleId]); $statement = $this->prepareStatementForSqlObject($delete); $result = $statement->execute(); $this->adapter->getDriver()->getConnection()->commit(); } catch (Exception $e) { $this->adapter->getDriver()->getConnection()->rollback(); ApplicationErrorLogger::log($e); return $e->getMessage(); } // fire the delete acl role event AclEvent::fireDeleteAclRoleEvent($roleId); return $result->count() ? true : false; }
/** * Test role synchronisation */ public function testRoleSynchronisation() { // create a first test ACL role $query = $this->model->insert()->into('acl_role')->values(['name' => 'test role 1']); $statement = $this->model->prepareStatementForSqlObject($query); $statement->execute(); $this->aclRolesIds[] = $this->model->getAdapter()->getDriver()->getLastGeneratedValue(); // create a test user $query = $this->model->insert()->into('user_list')->values(['nick_name' => Rand::getString(32), 'email' => Rand::getString(32), 'role' => $this->aclRolesIds[0]]); $statement = $this->model->prepareStatementForSqlObject($query); $statement->execute(); $this->usersIds[] = $this->model->getAdapter()->getDriver()->getLastGeneratedValue(); // delete the created ACL role $query = $this->model->delete()->from('acl_role')->where(['id' => $this->aclRolesIds[0]]); $statement = $this->model->prepareStatementForSqlObject($query); $statement->execute(); // fire the delete ACL role event AclEvent::fireDeleteAclRoleEvent($this->aclRolesIds[0]); // check the created test user's role $select = $this->model->select(); $select->from('user_list')->columns(['role'])->where(['user_id' => $this->usersIds[0]]); $statement = $this->model->prepareStatementForSqlObject($select); $resultSet = new ResultSet(); $result = $resultSet->initialize($statement->execute()); // user must be a default member $this->assertEquals($result->current()['role'], AclBaseModel::DEFAULT_ROLE_MEMBER); }