In REDAXO werden die Nutzerrechte über Rollen definiert. Rollen sammeln die Berechtigungen, die den Benutzern zugeteilt werden können. Die zuständige Klasse für einfache Berechtigungen ist rex_perm, die für erweiterte Berechtigungen (als multiselect
-Feld) ist rex_complex_perm
Berechtigungen können in der Datei package.yml
definiert werden, oder später im PHP-Code des AddOns.
page:
title: translate:title
perm: addonname[]
subpages:
foo: {perm: addonname[foo], title: translate:foo}
bar: {perm: addonname[bar], title: translate:bar}
Zur Laufzeit können die Berechtigungen in Gruppen eingeteilt werden und weitere registriert werden.
<?php
if(rex::isBackend() && is_object(rex::getUser())) {
rex_perm::register('addonname[]', null);
rex_perm::register('addonname[]', "foo");
rex_perm::register('addonname[]', "translate:bar");
}
Der 2. Parameter gibt eine zusätzliche Beschriftung aus.
Ohne den dritten Parameter werden alle Berechtigungen in die Gruppe rex_perm::GENERAL
gespeichert. Diese Berechtigungen erscheinen in den Rollen unter Allgemein
.
Dazu gibt es noch rex_perm::OPTIONS
und rex_perm::EXTRAS
. Diese Zusatzgruppen eigenen sich gut um die einzelnen Features eines AddOns freizugeben, wogegen GENERAL eher genutzt wird, um den Zugriff auf das AddOn/Plugin generell zu erlauben für diese Rolle.
<?php
if(rex::isBackend() && is_object(rex::getUser())) {
rex_perm::register('addonname[]', "Mein Addon");
rex_perm::register('addonname[foo]', "translate:addon_foo", rex_perm::OPTIONS);
rex_perm::register('addonname[bar]', "translate:addon_bar", rex_perm::GENERAL);
}
Komplexe Berechtigungen werden mit der Klasse rex_complex_perm
realisiert. Hier am Beispiel des YForm 4 Table-Managers:
rex_complex_perm::register('yform_manager_table_view', 'rex_yform_manager_table_perm_edit');
class rex_yform_manager_table_perm_edit extends rex_complex_perm
{
public function hasPerm($table_name)
{
return $this->hasAll() || in_array($table_name, $this->perms);
}
public static function getFieldParams()
{
$arrayOptions = [];
foreach (rex_yform_manager_table::getAll() as $table) {
$arrayOptions[$table->getTableName()] = rex_i18n::translate($table->getName()).' ['.$table->getTableName().']';
}
return [
'label' => rex_i18n::msg('yform_manager_table'),
'all_label' => rex_i18n::msg('yform_manager_tables_edit'),
'options' => $arrayOptions,
];
}
}
Es empfiehlt sich, zu prüfen, ob der Benutzer eingeloggt ist.
Prüfen, ob der User ein Admin ist rex::getUser()->isAdmin()
.
Prüfen, ob der User die nötigen Rechte aktiviert hat:
if( rex::getUser()->hasPerm('addonname[]') && rex::getUser()->hasPerm('addonname[foo]') ) {
// code goes here
}
Weitere Berechtigungen wie Module können wie folgt abgefragt werden:
if( rex::getUser()->getComplexPerm('modules')->hasPerm($ModuleID) ) {
// code goes here
}