Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,075 of 9,075 pages
About the help in other languages
All help pages

Autorisierung: Rollen, Richtlinien und Einschränkungen

Das Berechtigungssystem von Exponential für Entwickler, die Voters, Gates, Policies, Django-Berechtigungen oder CanCan-Abilities kennen - Rollen aus Richtlinien, Modulfunktionen und Einschränkungen, Zuweisungen an…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/web-framework-developers/authorization-roles-and-policies.md

On this page

This page is a translation. Read the English original

Autorisierung: Rollen, Richtlinien und Einschränkungen

Diese Seite richtet sich an Entwickler, die Voters, Gates, Policy-Klassen oder Berechtigungs-Decorators schreiben. Die Berechtigungen von Exponential sind Daten, die Administratoren unter Benutzer und Rollen verwalten: Eine Rolle ist eine Menge von Richtlinien; eine Richtlinie gewährt eine Funktion eines Moduls (content/read, expdemo/manage), optional eingeschränkt durch Einschränkungen (nur diese Klasse, dieser Bereich, dieser Teilbaum, diese Sprache, dieser Siteaccess); eine Rolle wird Benutzern oder Gruppen zugewiesen, optional beschränkt auf einen Teilbaum oder Bereich. Ihr Code deklariert die Funktionen und prüft sie; die Administratoren entscheiden, wer sie erhält (Richtlinien, Rollen und Einschränkungen).

Inhalt

  1. Das Modell
  2. Berechtigungen für Ihr Modul deklarieren
  3. Was der Kernel für Sie prüft
  4. Prüfen in PHP
  5. Prüfen in Templates
  6. Im Vergleich mit anderen Frameworks
  7. Regeln

Das Modell

BegriffKlasseBeispiel
RolleeZRoleRedakteur
RichtlinieeZPolicycontent/edit
EinschränkungeZPolicyLimitation, eZPolicyLimitationValueKlasse: Artikel, Bereich: Standard
ZuweisungRolle an Benutzer oder Gruppe, optional eingeschränktRedakteur für die Gruppe Redakteure, eingeschränkt auf den Teilbaum „News“

Die Anleitung für Administratoren: Rollen, Richtlinien und nicht aktivierte Benutzer.

Berechtigungen für Ihr Modul deklarieren

// extension/expdemo/modules/expdemo/module.php
$ViewList['manage'] = array( 'script' => 'manage.php', 'functions' => array( 'manage' ) );

// a limitation whose values are the sections, as kernel/content/module.php defines $SectionID
$SectionLimitation = array( 'name' => 'Section', 'values' => array(), 'class' => 'eZSection',
                            'function' => 'fetchList', 'parameter' => array( false ) );

$FunctionList = array();
$FunctionList['read'] = array();
$FunctionList['manage'] = array( 'Section' => $SectionLimitation );

$FunctionList benennt die Funktionen und die Einschränkungen, die jede von ihnen annimmt; die Administratoren sehen dann expdemo/read und expdemo/manage im Richtlinien-Editor (Richtlinienfunktionen und Einschränkungen, Referenz zu module.php).

Was der Kernel für Sie prüft

  • Das 'functions' => array( 'manage' ) eines Views wird geprüft, bevor der View läuft: Ohne die Funktion erhält der Benutzer „Zugriff verweigert“, ein anonymer Benutzer die Anmeldeseite.
  • Diese Prüfung wertet keine Einschränkungen für Ihre eigenen Daten aus; sie weiß nur, dass der Benutzer die Funktion hat, möglicherweise eingeschränkt.
  • Inhaltsabfragen (subTreeByNodeID(), fetch( 'content', ... )) liefern nur, was der Benutzer lesen darf, und wenden dabei jede Inhaltseinschränkung an.

Prüfen in PHP

$user = eZUser::currentUser();
$access = $user->hasAccessTo( 'expdemo', 'manage' );
switch ( $access['accessWord'] )
{
    case 'yes':     // unlimited
        break;
    case 'limited': // $access['policies'] holds the limitations, for example allowed section ids
        break;
    default:        // 'no'
        return $Params['Module']->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
}

if ( !$node->canRead() ) { /* deny */ }
if ( !$object->canEdit() ) { /* deny */ }

Fragen Sie bei Inhalten das Objekt oder den Knoten: Diese wenden Einschränkungen nach Klasse, Bereich, Eigentümer, Teilbaum, Status und Sprache an. Wenden Sie bei Ihren eigenen Tabellen die Einschränkungen aus $access['policies'] in Ihrer Abfrage an, und prüfen Sie die Eigentümerschaft selbst (Zugriffskontrolle im Code).

Prüfen in Templates

{if fetch( 'user', 'has_access_to', hash( 'module', 'expdemo', 'function', 'manage' ) )}
  <a href={'expdemo/manage'|ezurl}>{'Manage'|i18n( 'extension/expdemo' )}</a>
{/if}

Einen Link auszublenden ist Komfort, keine Sicherheit: Der View muss erneut prüfen (Template-Operatoren für Rollen und Richtlinien).

Im Vergleich mit anderen Frameworks

FrameworkKonzeptExponential
SymfonyisGranted(), Voters, #[IsGranted]hasAccessTo(), canRead(), die functions des Views
LaravelGates, Policy-Klassen, can-MiddlewareFunktionen in $FunctionList, Prüfungen im View
DjangoModellberechtigungen, @permission_required, Pakete für ObjektberechtigungenFunktionen und Einschränkungen; Objektprüfungen für Inhalte eingebaut
RailsCanCanCan-Abilities, Pundit-PoliciesRollen als Daten, in der Administrationsoberfläche bearbeitet
SpringMethod Security, ACLsRichtlinien mit Einschränkungen; ACL-ähnliche Prüfungen für Inhalte eingebaut

Der größte Unterschied: Die Regeln liegen in der Datenbank und werden von Administratoren geändert, nicht im Code. Ihr Code benennt die Funktionen und stellt die Fragen.

Regeln

  • Über den Zugriff entscheiden Richtlinien, niemals eine Prüfung auf eine Benutzer- oder Gruppen-ID in Code oder Templates.
  • Eine Funktion pro Art von Aktion (read, create, manage), nicht pro Bildschirm.
  • Gewähren Sie eine neue Funktion niemals standardmäßig dem anonymen Benutzer; dokumentieren Sie, was gewährt werden soll.
  • Wenden Sie auf eine Liste dieselben Prüfungen an wie auf ein einzelnes Element: Filtern Sie die Abfrage, statt Zeilen im Template auszublenden.
  • Hintergrundarbeit läuft als der Benutzer, der sie eingereiht hat, oder als eigener Integrationsbenutzer mit einer eigens dafür angelegten Rolle.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x