benutzerrechte

Quelle: https://redaxo.org/doku/main/benutzerrechte

Benutzerrechte

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

Definieren

Berechtigungen können in der Datei package.yml definiert werden, oder später im PHP-Code des AddOns.

Package.yml

page: title: translate:title perm: addonname[] subpages: foo: {perm: addonname[foo], title: translate:foo} bar: {perm: addonname[bar], title: translate:bar} ``n

PHP

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”); } `n

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 eignen 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); } `n

Komplexe Berechtigungen

Komplexe Berechtigungen werden mit der Klasse rex_complex_perm realisiert. Hier am Beispiel des YForm 4 Table-Managers:

boot.php

rex_complex_perm::register('yform_manager_table_view', 'rex_yform_manager_table_perm_edit'); ``n

Eigene Klasse

`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,
    ];
} }` ``n

Berechtigungen prüfen

Es empfiehlt sich, zu prüfen, ob der Benutzer eingeloggt ist.

Ist Admin

Prüfen, ob der User ein Admin ist rex::getUser()->isAdmin().

Einzelne Rechte prüfen

Prüfen, ob der User die nötigen Rechte aktiviert hat:

if( rex::getUser()->hasPerm('addonname[]') && rex::getUser()->hasPerm('addonname[foo]') ) { // code goes here } ``n

Zugriff auf Module

Weitere Berechtigungen wie Module können wie folgt abgefragt werden:

if( rex::getUser()->getComplexPerm('modules')->hasPerm($ModuleID) ) { // code goes here } ``n