eZ\Publish\Core\Repository\Permission\PermissionResolver::hasAccess PHP Method

hasAccess() public method

public hasAccess ( $module, $function, eZ\Publish\API\Repository\Values\User\UserReference $userReference = null )
$userReference eZ\Publish\API\Repository\Values\User\UserReference
    public function hasAccess($module, $function, APIUserReference $userReference = null)
    {
        // Full access if sudo nesting level is set by {@see sudo()}
        if ($this->sudoNestingLevel > 0) {
            return true;
        }
        if ($userReference === null) {
            $userReference = $this->getCurrentUserReference();
        }
        // Uses SPI to avoid triggering permission checks in Role/User service
        $permissionSets = array();
        $spiRoleAssignments = $this->userHandler->loadRoleAssignmentsByGroupId($userReference->getUserId(), true);
        foreach ($spiRoleAssignments as $spiRoleAssignment) {
            $permissionSet = array('limitation' => null, 'policies' => array());
            $spiRole = $this->userHandler->loadRole($spiRoleAssignment->roleId);
            foreach ($spiRole->policies as $spiPolicy) {
                if ($spiPolicy->module === '*' && $spiRoleAssignment->limitationIdentifier === null) {
                    return true;
                }
                if ($spiPolicy->module !== $module && $spiPolicy->module !== '*') {
                    continue;
                }
                if ($spiPolicy->function === '*' && $spiRoleAssignment->limitationIdentifier === null) {
                    return true;
                }
                if ($spiPolicy->function !== $function && $spiPolicy->function !== '*') {
                    continue;
                }
                if ($spiPolicy->limitations === '*' && $spiRoleAssignment->limitationIdentifier === null) {
                    return true;
                }
                $permissionSet['policies'][] = $this->roleDomainMapper->buildDomainPolicyObject($spiPolicy);
            }
            if (!empty($permissionSet['policies'])) {
                if ($spiRoleAssignment->limitationIdentifier !== null) {
                    $permissionSet['limitation'] = $this->limitationService->getLimitationType($spiRoleAssignment->limitationIdentifier)->buildValue($spiRoleAssignment->values);
                }
                $permissionSets[] = $permissionSet;
            }
        }
        if (!empty($permissionSets)) {
            return $permissionSets;
        }
        return false;
        // No policies matching $module and $function, or they contained limitations
    }