eZ\Publish\Core\Repository\RoleService::updatePolicyByRoleDraft PHP Method

updatePolicyByRoleDraft() public method

Updates the limitations of a policy. The module and function cannot be changed and the limitations are replaced by the ones in $roleUpdateStruct.
Since: 6.0
public updatePolicyByRoleDraft ( eZ\Publish\API\Repository\Values\User\RoleDraft $roleDraft, eZ\Publish\API\Repository\Values\User\PolicyDraft $policy, eZ\Publish\API\Repository\Values\User\PolicyUpdateStruct $policyUpdateStruct ) : eZ\Publish\API\Repository\Values\User\PolicyDraft
$roleDraft eZ\Publish\API\Repository\Values\User\RoleDraft
$policy eZ\Publish\API\Repository\Values\User\PolicyDraft
$policyUpdateStruct eZ\Publish\API\Repository\Values\User\PolicyUpdateStruct
return eZ\Publish\API\Repository\Values\User\PolicyDraft
    public function updatePolicyByRoleDraft(APIRoleDraft $roleDraft, PolicyDraft $policy, APIPolicyUpdateStruct $policyUpdateStruct)
    {
        if (!is_string($policy->module)) {
            throw new InvalidArgumentValue('module', $policy->module, 'Policy');
        }
        if (!is_string($policy->function)) {
            throw new InvalidArgumentValue('function', $policy->function, 'Policy');
        }
        if ($this->repository->hasAccess('role', 'update') !== true) {
            throw new UnauthorizedException('role', 'update');
        }
        if ($policy->roleId !== $roleDraft->id) {
            throw new InvalidArgumentException('$policy', "doesn't belong to provided role draft");
        }
        $limitations = $policyUpdateStruct->getLimitations();
        $limitationValidationErrors = $this->validatePolicy($policy->module, $policy->function, $limitations);
        if (!empty($limitationValidationErrors)) {
            throw new LimitationValidationException($limitationValidationErrors);
        }
        $spiPolicy = $this->roleDomainMapper->buildPersistencePolicyObject($policy->module, $policy->function, $limitations);
        $spiPolicy->id = $policy->id;
        $spiPolicy->roleId = $policy->roleId;
        $spiPolicy->originalId = $policy->originalId;
        $this->repository->beginTransaction();
        try {
            $this->userHandler->updatePolicy($spiPolicy);
            $this->repository->commit();
        } catch (Exception $e) {
            $this->repository->rollback();
            throw $e;
        }
        return $this->roleDomainMapper->buildDomainPolicyObject($spiPolicy);
    }