public function createPrivilege($permission, array $parameters = [])
{
$permission = strtolower($permission);
if ($permission !== PrivilegeInterface::GRANT && $permission !== PrivilegeInterface::DENY && $permission !== PrivilegeInterface::ABSTAIN) {
throw new SecurityException(sprintf('permission must be either "GRANT", "DENY" or "ABSTAIN", given: "%s"', $permission), 1401878462);
}
$privilegeParameters = [];
foreach ($this->parameterDefinitions as $parameterDefinition) {
$parameterName = $parameterDefinition->getName();
if (!isset($parameters[$parameterName])) {
throw new SecurityException(sprintf('The parameter "%s" is not specified', $parameterName), 1401794982);
}
$privilegeParameterClassName = $parameterDefinition->getParameterClassName();
$privilegeParameters[$parameterName] = new $privilegeParameterClassName($parameterName, $parameters[$parameterName]);
}
$privilege = new $this->privilegeClassName($this, $this->matcher, $permission, $privilegeParameters);
if (!$privilege instanceof PrivilegeInterface) {
throw new SecurityException(sprintf('Expected instance of PrivilegeInterface, got "%s"', get_class($privilege)), 1395869340);
}
$privilege->injectObjectManager($this->objectManager);
return $privilege;
}