public function deletePolicyAction(Request $request, $roleId, $policyId) { $role = $this->roleService->loadRole($roleId); $deleteForm = $this->createForm(new PolicyDeleteType(), ['policyId' => $policyId, 'roleId' => $roleId]); $deleteForm->handleRequest($request); if ($deleteForm->isValid()) { try { $roleDraft = $this->roleService->loadRoleDraftByRoleId($roleId); } catch (NotFoundException $e) { // The draft doesn't exist, let's create one $roleDraft = $this->roleService->createRoleDraft($role); } $foundPolicy = false; /** @var PolicyDraft $policy */ foreach ($roleDraft->getPolicies() as $policy) { if ($policy->originalId == $policyId) { $foundPolicy = true; break; } } if (!$foundPolicy) { throw new BadRequestHttpException($this->translator->trans('role.error.policy_not_found', ['%policyId%' => $policyId, '%roleId%' => $roleId], 'role')); } $this->roleService->removePolicyByRoleDraft($roleDraft, $policy); $this->roleService->publishRoleDraft($roleDraft); $this->notify('role.policy.deleted', ['%roleIdentifier%' => $role->identifier, '%policyId%' => $policyId], 'role'); } elseif ($deleteForm->isSubmitted()) { $this->notifyError('role.policy.error.delete', ['%roleIdentifier%' => $role->identifier, '%policyId%' => $policyId], 'role'); } return $this->redirectToRouteAfterFormPost('admin_roleView', ['roleId' => $roleId]); }
public function processRemoveDraft(FormActionEvent $event) { /** @var \EzSystems\RepositoryForms\Data\Role\PolicyCreateData|\EzSystems\RepositoryForms\Data\Role\PolicyUpdateData $data */ $data = $event->getData(); if (!$data->isNew()) { $this->roleService->removePolicyByRoleDraft($data->roleDraft, $data->policyDraft); } $this->roleService->deleteRoleDraft($data->roleDraft); }
/** * Remove a policy from a role draft. * * @since 6.2 * @deprecated since 6.3, use {@see deletePolicy} * * @param $roleId * @param $policyId * * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException * * @return \eZ\Publish\Core\REST\Server\Values\NoContent */ public function removePolicyByRoleDraft($roleId, $policyId, Request $request) { $roleDraft = $this->roleService->loadRoleDraft($roleId); $policy = null; foreach ($roleDraft->getPolicies() as $rolePolicy) { if ($rolePolicy->id == $policyId) { $policy = $rolePolicy; break; } } if ($policy !== null) { $this->roleService->removePolicyByRoleDraft($roleDraft, $policy); return new Values\NoContent(); } throw new Exceptions\NotFoundException("Policy not found: '{$request->getPathInfo()}'."); }
/** * Removes a policy from a role draft. * * @since 6.0 * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the authenticated user is not allowed to remove a policy * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException if policy does not belong to the given role draft * * @param \eZ\Publish\API\Repository\Values\User\RoleDraft $roleDraft * @param \eZ\Publish\API\Repository\Values\User\Policy $policy the policy to remove from the role * * @return \eZ\Publish\API\Repository\Values\User\RoleDraft the updated role */ public function removePolicyByRoleDraft(RoleDraft $roleDraft, Policy $policy) { $returnValue = $this->service->removePolicyByRoleDraft($roleDraft, $policy); $this->signalDispatcher->emit(new RemovePolicyByRoleDraftSignal(array('roleId' => $roleDraft->id, 'policyId' => $policy->id))); return $returnValue; }