eZ\Publish\Core\Persistence\Legacy\User\Mapper::mapPolicies PHP Method

mapPolicies() public method

Map policy data to an array of policies.
public mapPolicies ( array $data ) : eZ\Publish\SPI\Persistence\User\Policy
$data array
return eZ\Publish\SPI\Persistence\User\Policy
    public function mapPolicies(array $data)
    {
        /**
         * @var \eZ\Publish\SPI\Persistence\User\Policy[]
         */
        $policies = array();
        foreach ($data as $row) {
            $policyId = $row['ezpolicy_id'];
            if (!isset($policies[$policyId]) && $policyId !== null) {
                $originalId = null;
                if ($row['ezpolicy_original_id']) {
                    $originalId = (int) $row['ezpolicy_original_id'];
                } elseif ($row['ezrole_version']) {
                    $originalId = (int) $policyId;
                }
                $policies[$policyId] = new Policy(array('id' => (int) $policyId, 'roleId' => (int) $row['ezrole_id'], 'originalId' => $originalId, 'module' => $row['ezpolicy_module_name'], 'function' => $row['ezpolicy_function_name'], 'limitations' => '*'));
            }
            if (!$row['ezpolicy_limitation_identifier']) {
                continue;
            } elseif ($policies[$policyId]->limitations === '*') {
                $policies[$policyId]->limitations = array();
            }
            if (!isset($policies[$policyId]->limitations[$row['ezpolicy_limitation_identifier']])) {
                $policies[$policyId]->limitations[$row['ezpolicy_limitation_identifier']] = array($row['ezpolicy_limitation_value_value']);
            } elseif (!in_array($row['ezpolicy_limitation_value_value'], $policies[$policyId]->limitations[$row['ezpolicy_limitation_identifier']])) {
                $policies[$policyId]->limitations[$row['ezpolicy_limitation_identifier']][] = $row['ezpolicy_limitation_value_value'];
            }
        }
        return array_values($policies);
    }

Usage Example

Beispiel #1
0
 /**
  * Returns the user policies associated with the user (including inherited policies from user groups).
  *
  * @param mixed $userId
  *
  * @return \eZ\Publish\SPI\Persistence\User\Policy[]
  */
 public function loadPoliciesByUserId($userId)
 {
     $data = $this->roleGateway->loadPoliciesByUserId($userId);
     $policies = $this->mapper->mapPolicies($data);
     foreach ($policies as $policy) {
         $this->limitationConverter->toSPI($policy);
     }
     return $policies;
 }