/** * {@inheritDoc} * @throws \Doctrine\DBAL\ConnectionException */ protected function onSuccess(AbstractRole $role, array $appendUsers, array $removeUsers) { // TODO: When task BB-1046 will be done, remove method removeOriginalRoleFromUsers. // In method addNewRoleToUsers before addRole add method removeRole($role). Also needs delete flush; /** @var AccountUserRole $role */ if ($role->getId()) { /** @var AccountUserRoleRepository $roleRepository */ $roleRepository = $this->doctrineHelper->getEntityRepository($role); $this->appendUsers = $roleRepository->getAssignedUsers($role); } $this->loggedAccountUser = $this->securityFacade->getLoggedUser(); /** @var EntityManager $manager */ $manager = $this->managerRegistry->getManagerForClass(ClassUtils::getClass($this->loggedAccountUser)); $connection = $manager->getConnection(); $connection->setTransactionIsolation(Connection::TRANSACTION_REPEATABLE_READ); $connection->beginTransaction(); try { $this->removeOriginalRoleFromUsers($role, $manager); AclRoleHandler::onSuccess($this->newRole, $appendUsers, $removeUsers); $this->addNewRoleToUsers($role, $manager, $appendUsers, $removeUsers); $manager->flush(); $connection->commit(); } catch (\Exception $e) { $connection->rollBack(); throw $e; } }
/** * Update role field. * * @param AbstractRole $role * @param ObjectRepository $repository * @return bool */ protected function updateRole(AbstractRole $role, ObjectRepository $repository) { if ($role->getRole()) { return true; } $roleValue = $role->generateUniqueRole(); if ($repository->findOneBy(['role' => $roleValue])) { return false; } $role->setRole($roleValue, false); return true; }
/** * Constructor * * The real implementation of this method is auto generated. * * IMPORTANT: If the derived class has own constructor it must call parent constructor. * * {@inheritdoc} */ public function __construct($role) { parent::__construct($role); }
/** * {@inheritDoc} */ public function process(AbstractRole $role) { $this->originalAccount = $role->getAccount(); return parent::process($role); }