public function up()
{
$policyExaminationResult = array();
$this->processConfiguration(\Neos\Flow\Configuration\ConfigurationManager::CONFIGURATION_TYPE_POLICY, function ($configuration) use(&$policyExaminationResult) {
if (!isset($configuration['roles'])) {
return;
}
$localRoles = array();
foreach ($configuration['roles'] as $roleIdentifier => $roleConfiguration) {
$localRoles[] = $roleIdentifier;
}
foreach ($configuration['roles'] as $roleIdentifier => $roleConfiguration) {
if (!is_array($roleConfiguration) || $roleConfiguration === array()) {
continue;
}
foreach ($roleConfiguration as $parentRoleIdentifier) {
if (!is_string($parentRoleIdentifier)) {
continue;
}
if (strpos($parentRoleIdentifier, ':') === false && !in_array($parentRoleIdentifier, $localRoles, true)) {
$policyExaminationResult[] = '"' . $parentRoleIdentifier . '" is used as parent role for "' . $roleIdentifier . '"';
}
}
}
if (!isset($configuration['acls']) || !is_array($configuration['acls'])) {
return;
}
foreach ($configuration['acls'] as $roleIdentifier => $acl) {
if (strpos($roleIdentifier, ':') === false && !in_array($roleIdentifier, $localRoles, true)) {
$policyExaminationResult[] = '"' . $roleIdentifier . '" is used in ACL definition';
}
}
});
if ($policyExaminationResult !== array()) {
$this->showWarning('The Policy.yaml file(s) for this package use roles that are not defined locally. You must prefix them with the source package key.' . PHP_EOL . PHP_EOL . implode('* ' . PHP_EOL, $policyExaminationResult));
}
}