mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-26 07:14:35 +02:00
Use Zend_Form_Element::filterName() for translating restriction names to element names
fixes #8086
This commit is contained in:
parent
6960a08de0
commit
2c1a37afa3
@ -6,6 +6,7 @@ namespace Icinga\Forms\Security;
|
|||||||
|
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use LogicException;
|
use LogicException;
|
||||||
|
use Zend_Form_Element;
|
||||||
use Icinga\Application\Icinga;
|
use Icinga\Application\Icinga;
|
||||||
use Icinga\Forms\ConfigForm;
|
use Icinga\Forms\ConfigForm;
|
||||||
use Icinga\Util\String;
|
use Icinga\Util\String;
|
||||||
@ -35,6 +36,7 @@ class RoleForm extends ConfigForm
|
|||||||
*/
|
*/
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
$helper = new Zend_Form_Element('bogus');
|
||||||
foreach (Icinga::app()->getModuleManager()->getLoadedModules() as $module) {
|
foreach (Icinga::app()->getModuleManager()->getLoadedModules() as $module) {
|
||||||
foreach ($module->getProvidedPermissions() as $permission) {
|
foreach ($module->getProvidedPermissions() as $permission) {
|
||||||
/** @var object $permission */
|
/** @var object $permission */
|
||||||
@ -42,7 +44,18 @@ class RoleForm extends ConfigForm
|
|||||||
}
|
}
|
||||||
foreach ($module->getProvidedRestrictions() as $restriction) {
|
foreach ($module->getProvidedRestrictions() as $restriction) {
|
||||||
/** @var object $restriction */
|
/** @var object $restriction */
|
||||||
$this->providedRestrictions[$restriction->name] = $restriction->description;
|
$name = $helper->filterName($restriction->name); // Zend only permits alphanumerics, the underscore,
|
||||||
|
// the circumflex and any ASCII character in range
|
||||||
|
// \x7f to \xff (127 to 255)
|
||||||
|
while (isset($this->providedRestrictions[$name])) {
|
||||||
|
// Because Zend_Form_Element::filterName() replaces any not permitted character with the empty
|
||||||
|
// string we may have duplicate names, e.g. 're/striction' and 'restriction'
|
||||||
|
$name .= '_';
|
||||||
|
}
|
||||||
|
$this->providedRestrictions[$name] = array(
|
||||||
|
'description' => $restriction->description,
|
||||||
|
'name' => $restriction->name
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,13 +103,13 @@ class RoleForm extends ConfigForm
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
foreach ($this->providedRestrictions as $name => $description) {
|
foreach ($this->providedRestrictions as $name => $spec) {
|
||||||
$this->addElement(
|
$this->addElement(
|
||||||
'text',
|
'text',
|
||||||
$name,
|
$name,
|
||||||
array(
|
array(
|
||||||
'label' => $name,
|
'label' => $spec['name'],
|
||||||
'description' => $description
|
'description' => $spec['description']
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -129,6 +142,15 @@ class RoleForm extends ConfigForm
|
|||||||
? String::trimSplit($role['permissions'])
|
? String::trimSplit($role['permissions'])
|
||||||
: null;
|
: null;
|
||||||
$role['name'] = $name;
|
$role['name'] = $name;
|
||||||
|
$restrictions = array();
|
||||||
|
foreach ($this->providedRestrictions as $name => $spec) {
|
||||||
|
if (isset($role[$spec['name']])) {
|
||||||
|
// Translate restriction names to filtered element names
|
||||||
|
$restrictions[$name] = $role[$spec['name']];
|
||||||
|
unset($role[$spec['name']]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$role = array_merge($role, $restrictions);
|
||||||
$this->populate($role);
|
$this->populate($role);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -230,6 +252,15 @@ class RoleForm extends ConfigForm
|
|||||||
if (isset($values['permissions'])) {
|
if (isset($values['permissions'])) {
|
||||||
$values['permissions'] = implode(', ', $values['permissions']);
|
$values['permissions'] = implode(', ', $values['permissions']);
|
||||||
}
|
}
|
||||||
|
$restrictions = array();
|
||||||
|
foreach ($this->providedRestrictions as $name => $spec) {
|
||||||
|
if (isset($values[$name])) {
|
||||||
|
// Translate filtered element names to restriction names
|
||||||
|
$restrictions[$spec['name']] = $values[$name];
|
||||||
|
unset($values[$name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$values = array_merge($values, $restrictions);
|
||||||
return $values;
|
return $values;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user