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
- Das Modell
- Berechtigungen für Ihr Modul deklarieren
- Was der Kernel für Sie prüft
- Prüfen in PHP
- Prüfen in Templates
- Im Vergleich mit anderen Frameworks
- Regeln
Das Modell
| Begriff | Klasse | Beispiel |
|---|---|---|
| Rolle | eZRole | Redakteur |
| Richtlinie | eZPolicy | content/edit |
| Einschränkung | eZPolicyLimitation, eZPolicyLimitationValue | Klasse: Artikel, Bereich: Standard |
| Zuweisung | Rolle an Benutzer oder Gruppe, optional eingeschränkt | Redakteur 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
| Framework | Konzept | Exponential |
|---|---|---|
| Symfony | isGranted(), Voters, #[IsGranted] | hasAccessTo(), canRead(), die functions des Views |
| Laravel | Gates, Policy-Klassen, can-Middleware | Funktionen in $FunctionList, Prüfungen im View |
| Django | Modellberechtigungen, @permission_required, Pakete für Objektberechtigungen | Funktionen und Einschränkungen; Objektprüfungen für Inhalte eingebaut |
| Rails | CanCanCan-Abilities, Pundit-Policies | Rollen als Daten, in der Administrationsoberfläche bearbeitet |
| Spring | Method Security, ACLs | Richtlinien 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
- Authentifizierung und Sitzungen
- Muster für Richtlinienfunktionen
- Handler für Inhaltseinschränkungen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
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.