Rechte
Table of Contents
Die Rechteverwaltung in Konquadrat baut auf dem PermissionControl vom SetaFramework auf. Sprich es gibt ResourceDefinitions, welche die Dinge zu denen der Zugang definitiert wird darstellen, und für jeden Benutzer ein PermissionControl, welches konfiguriert wird zu welcher Resource der Zugang möglich ist und anschließend gefragt wird ob der Zugang erlaubt ist.
ResourceDefinitions
Grundsätzlich besitzt jedes Kon2-Objekt eine ResourceDefinition mit den Aktionen "read", "write" und "delete". Zusätzlich besitzen Objekte vom Typ UserTpl noch "setPermission". Ansonsten gibt es lediglich noch die Admin-ResourceDefinition mit "historyRead", "reload", "cleanup" und "showDeleted".
Konfigurieren
Das UserTpl-Template besitzt eine Methode "getPermissionControl", welche die PermissionControl für den Benutzer zusammenbaut und zurück gibt. Standardmäßig sieht die Logik zum generieren der PermissionControl wie folgt aus:
- Falls "UserGroup" gesetzt ist (nicht "NONE"), wird anhand dieser Gruppe das PermissionControl aufgebaut.
- Falls die Klasse \com\setasign\Konquadrat\Custom\Permissions existiert wird diese verwendet. (siehe unten "Permissions-Klasse")
- Ansonsten ist der Benutzer ein Admin und darf ALLES.
Falls die Implementierung vom UserTpl eine Methode "setupPermissions" besitzt, kann das PermissionControl hierüber im nachhinein noch verändert werden.
Benutzergruppen
Falls der Benutzer einer Benutzergruppe zugeordnet ist (also nicht auf "NONE" steht), werden die Helfer-Methoden in \com\setasign\Konquadrat\Permission\AbstractPermissions verwendet um das PermissionControl zusammen zu bauen. Dabei gibt es folgende Abstufungen:
- Admin - darf ALLES
- defaultUser - darf nur seinen eigenen Benutzer sehen und bearbeiten (keine Rechte setzen), einige Objekte z.B. Exporte sind nicht erlaubt, alle Projekt bezogenen Objekte sind erlaubt
- defaultUserWithExport - wie defaultUser nur mit Zugriff auf Exporte erstellen und lesen
- readOnly - darf nur seinen eigenen Benutzer sehen und bearbeiten (keine Rechte setzen), darf keine Exporte erstellen oder lesen, alle Projekt bezogenen Objekte dürfen nur gelesen werden
- readOnlyWithExport - wie readOnly nur mit Zugriff auf Exporte erstellen und lesen
Permissions-Klasse
Falls die Benutzergruppe auf "NONE" steht und eine \com\setasign\Konquadrat\Custom\Permissions Klasse existiert wird diese zum Generieren des PermissionControl verwendet. Die Klasse muss \com\setasign\Konquadrat\Permission\AbstractPermissions erweitern und somit folgende Methode implementieren:
abstract public function setup(
ResourceDefinitionManager $resourceDefinitionManager,
ObjectConfig $objectConfig,
UserTpl $user
): PermissionControl;
// Beispiel-Implementierung
public function setup(
ResourceDefinitionManager $resourceDefinitionManager,
ObjectConfig $objectConfig,
UserTpl $user
): PermissionControl {
$permissionControl = new PermissionControl($resourceDefinitionManager);
/**
* @var User $user
*/
$userId = $user->id;
switch ($userId) {
case 1: // UserA
case 3: // UserB
LoggerHelper::ensureLogger($this->logger)->info('Loaded user permissions.');
self::setupDefaultUser($resourceDefinitionManager, $permissionControl, $objectConfig, $userId, true);
break;
}
return $permissionControl;
}
