Berechtigung
Konzept
Benutzer agieren immer im Kontext einer Rolle.
Mit dem rollenbasierten Autorisierungsmodell kann der Zugriff für jeden Vorgang (Ausführung einer Funktionalität, Öffnen einer Anzeige- oder Bearbeitungs-Oberfläche) definiert werden.
Mit Benutzergruppen (Usergroups) werden Teams abgebildet. Benutzergruppen werden z.B. für die Zuteilung von Todos verwendet.
Fachentitäten können einem Mandanten (Tenant) zugewiesen werden. Dadurch sind sie nur noch für Benutzer sichtbar, die dem Mandanten zugewiesen sind.
Idee ist, dass in Fachanwendungen die Tenant-Zugehörigkeit einer Entität weiter vererbt wird. So wird z.B. in debit die Tenant-Zugehörigkeit eines Gläubigers automatisch auf das Dossier und auf die dem Dossier zugewiesenen Forderungen vererbt.
classDiagram
direction LR
class User
class Role
class Permission
class Tenant
Role o-- "n" Permission
User o-- "n" Role
Role <-- User : CurrentRole
Role <-- Role : ParentRole
User o-- "n" Tenant
Für User gilt:
- Einem User können 0-n Rollen zugewiesen werden, wobei höchstens eine Rolle aktiv ist.
- Einem User können 0-1000 Benutzergruppen zugewiesen werden.
- Einem User können 0-1000 Tenants zugewiesen werden.
System-User
System-User (SYSTEM, READONLY, MIGRATION) haben Zugriff auf alle Tenants.
User ohne Rolle
Ist einem User keine Rolle zugewiesen, kann er sich nicht anmelden, da er keine Rechte zugewiesen hat.
Für Rollen gilt:
- Einer Rolle können 1-n funktionale Berechtigungen zugewiesen sein. Die Rolle Superuser hat alle Berechtigungen zugewiesen.
- Rollen können vererbt werden.
Umsetzung
Basis-Funktionalität
Rollen, Berechtigungen, Benutzergruppen und Tenants werden im Raum System unter Rollen erfasst. Sie werden im Export und Import von Konfigurationen berücksichtigt. Die Zuweisungen zu einem User werden im Raum User unterhalten.
Interface ISupportsTenantRestriction markiert ein IEntity als Tenant-fähig. Als konkrete Baisiklasse kann EntityBase verwendet werden. EntityBase hat das benötigte Property RequiredTenantPermission bereits implemntiert.
Für Queries mit Tenant-Einschränkung steht IUnitOfWork.LinqWithDeleteAndTenantPermissionCheck() zur Verfügung. Damit wird die Query für normale Benutzer (nicht System-User) auf nicht als "gelöscht" markierte Entitäten, auf die der aktuelle Benutzer Zugriff hat, eingeschränkt.
Der SearchProvider indexiert RequiredTenantPermission von Tenant-fähigen Entitäten und schränkt jede Suchabfrage eines normale Benutzers auf Entitäten, auf die der aktuelle Benutzer Zugriff hat, ein.
Wird eine Entität mit ReadRepository.GetBy... oder EisEnvironment.GetBy... geladen, wird die Tenant-Berechitung automatisch geprüft.
Damit Tenant- Stammdaten und -Berechtigungen nicht bei jedem Zugriff geladen werden müssen, werden sie im Cache unter Context “User” gecached. Der Cache wird nach jeder Mutation von User- oder Berechtigungs-Daten zurückgesetzt.
classDiagram
direction LR
namespace Eis.Framework.Business.Core {
class ISupportsTenantRestriction {
+ RequiredTenantPermission
}
}
namespace Eis.Framework.Business.Base {
class IUnitOfWork{
+ LinqWithDeleteAndTenantPermissionCheck() IQueryable
+ LinqWithoutDeleted() IQueryable
}
class EntityBase {
+ RequiredTenantPermission
+ SetRequiredTenantPermission(String)
}
}
Tenantfähige Entitäten
Ob eine Entität eine Sichtbarkeitseinschränkung auf Basis eines Tenants unterstützt, kann über QueryRegisteredTypes ermittelt werden.
Unterstützt eine Entität die Tenant-Einschränkung, hat Spalte SupportsTenantRestriction den Wert true. Technisch handelt es sich dabei um Entitäten, die das Interface ISupportsTenantRestriction implementieren.
Folgende elego-Entitäten unterstützen eine Tenant-Einschränkung:
- IAddressItem
- IArchiveDocument und IArchiveDocumentInfo
- ITodo
- IMailboxItem
In Raum MyWork werden dem aktuellen Benutzer ausschliesslich Todos angezeigt, für die eine entsprechende Tenant-Berechtigung vorhanden ist. Im Raum Betrieb werden hingegen alle Todos angezeigt – auch solche, für die der aktuelle Benutzer keine Tenant-Berechtigung besitzt. Das Öffnen eines Todos ist jedoch nur mit der entsprechenden Tenant-Berechtigung möglich.
Für Mailbox-Items gilt ein vergleichbares Verhalten. Im Raum MyWork werden dem angemeldeten Benutzer ausschliesslich Mailbox-Items angezeigt, für die eine entsprechende Tenant-Berechtigung vorhanden ist. Im Raum Betrieb werden hingegen alle Mailbox-Items angezeigt, unabhängig von der Tenant-Berechtigung des aktuellen Benutzers. Das Öffnen eines Mailbox-Items ist jedoch nur mit der entsprechenden Tenant-Berechtigung möglich.
Anwendung
Beispiel einer Query mit Tenant-Einschränkung (Entität muss ISupportsTenantRestriction implementieren):
Folgende Field-Templates können in Anwendungen verwendet werden:
| Tempalte | Beschreibung |
|---|---|
| SYS_FT_TenantPermission | Zeigt alle verfügbare Tenant-Berechtigungen an. |
| SYS_FT_Tenant_AssignedToCurrentUser | Zeigt dem aktuellen Benutzer zugewiesene Tenant-Berechtigungen an. |