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
In Raum MyWork werden dem aktuellen Benutzer nur Todos mit vorhandener Tenant-Berechtigung angezeigt. In Raum Betrieb hingegen werden dem aktuellen Benutzer alle Todos, auch solche ohne vorhandene Tenant-Berechtigung, angezeigt. Das öffnen eines Todos bleibt berechtigten Benutzern vorbehalten.
Ähnlich wie Todos werden dem angemeldeten User im Raum MyWork auch nur Mailbox-Items mit vorhandener Tenant-Berechtigung angezeigt (QueryMailboxItemsForCurrentUser ). Im Raum Betrieb hingegen werden alle Items angezeigt (QueryMailboxItems), können aber nur mit vorhandener Tenant-Berechtigung geöffnet werden.
Folgende elego-Entitäten sind tenant-fähig:
- IAddressItem
- IArchiveDocument und IArchiveDocumentInfo
- alle Entitäten des Person-Providers.
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. |