Skip to content

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
Hold "Alt" / "Option" to enable pan & zoom

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)
        }

    }
Hold "Alt" / "Option" to enable pan & zoom

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):

var query = _unitOfWork
   .LinqWithDeleteAndTenantPermissionCheck<IPerson>()
   .AsQueryable();

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.