Skip to main content

Berechtigungskonzept

Das Berechtigungskonzept von KIX 18 unterscheidet zwischen verschiedenen Zugriffsebenen, die einander bedingen.

Das heißt, zunächst muss eine Berechtigung bestehen, überhaupt auf eine Ressource (bspw. /tickets ) zugreifen zu dürfen. Danach werden die Basisberechtigungen geprüft. Wenn dieser Zugriff zulässig ist, werden weitere Objektberechtigungen geprüft und schließlich Eigenschaftsberechtigungen angewandt. 

  • Ressourcen-Ebene - steuert Zugriffe auf Objektsammlungen

    z. B. Tickets, FAQ, Teams usw.

    Sonderfall: eine Sammlung mit einem Element, z. B. /tickets/123 definiert eine Sammlung bestehend aus genau einem Objekt

  • Basis-Ebene - steuert die Zugriffe auf ein Businessobjekt

    z. B. auf Tickets in Teams/Queues

    (s. auch Basisberechtigungen)

  • Objekt-Ebene - steuert Zugriffe auf konkrete Objekte, die durch Eigenschaften der Objekte beschrieben werden.

    z. B. Tickets in bestimmten Teams oder Tickets zu bestimmten Organisationen

  • Eigenschaften-Ebene - steuert Zugriffe auf Objekteigenschaften

    z. B. den Status eines Tickets (Ticket.State), die Priorität eines Tickets (Ticket.Priority) oder die im Ticket gebuchte Zeit (Ticket.AccountedTime)

Hinweis

Zwischen den Ebenen bestehen ein Erfordernis-Zusammenhang.

Das heißt:

  • Ohne Zugriff auf Ressource erfolgt kein Zugriff auf das Objekt.

  • Ohne Zugriff auf das Objekt erfolgt kein Zugriff auf Eigenschaft.

In KIX 18 werden folgende Berechtigungsarten verwendet:

Recht

Notation

Beschreibung

Hinweis

CREATE

C

Schreibrecht

Der Nutzer darf ein neues Element erstellen, z. B. Ticket, Team, Asset, Organisation, Kontakt oder FAQ.

Entspricht einem HTTP-POST

READ

R

Nur-Lese-Recht

Der Nutzer darf ein bestehendes Element nur einsehen, aber nicht bearbeiten.

Entspricht einem HTTP-GET

UPDATE

U

Bearbeiten-Recht

Der Nutzer darf ein bestehendes Element bearbeiten, z. B. ein Ticket in ein Team verschieben.

Entspricht einem HTTP-PATCH

DELETE

D

Löschen-Recht

Der Nutzer darf ein bestehendes Element löschen, sofern dies vom System her möglich ist (z. B. eine Notiz zu einem Ticket).

Entspricht einem HTTP-DELETE

DENY

(ohne)

Verweigerungs-Recht

Jeglicher Zugriff auf das Element wird strikt unterbunden. 

Die DENY-Regel besitzt die höchste Priorität und kann nicht überschrieben werden.

Sie entzieht alle anderweitig zugestandenen Berechtigungen und ist damit relevant für die Kombination von Rollen.

Für leichtere Lesbarkeit wird die Notation "CRUDX" verwendet: 

Notation

Beschreibung

-R---

für nur Lesen

CR---

für Erstellen und Lesen

CRU--

für Erstellen, Lesen und Ändern

---D-

für Löschen

-----

für keinen Zugriff (der durch andere Rollen wieder erweitert werden kann)

----X

für absolut keinen Zugriff (der nicht durch andere Rollen aufgehoben werden kann)

Die Berechtigungen auf die einzelnen Ebenen sind vergleichbar mit einer Aktensammlung.

berechtigungskonzept_aktenanlalogie.png

Abb.: Aktenanalogie der Berechtigungen

Ebenen

Berechtigungen

Create

Read

Update

Delete

Deny

1. Ressourcen

Erstellen in Ressource

Nutzer kann neue Akten anlegen.

Lesen in Ressource

Nutzer kann Akten lesen.

Ändern in Ressource

Nutzer kann Akten ändern.

Löschen in Ressource

Nutzer kann Akten löschen.

Jeglichen Zugriff auf Ressource entziehen

Nutzer darf absolut gar nichts mit Akten tun.

2. Basis

Erstellen von Tickets in einem bestimmten Team.

Nutzer kann neue Akten anlegen und verschieben.

Lesen von Tickets in einem bestimmten Team.

Nutzer kann Akten lesen.

Erstellen und Verschieben von Tickets in einem bestimmten Team.

Nutzer kann neue Akten anlegen und verschieben.

Löschen von Tickets in einem bestimmten Team.

Nutzer kann Akten löschen.

Jeglichen Zugriff auf Tickets im Team entziehen

Nutzer darf absolut gar nichts mit Akten tun.

3. Objekte

Objekt darf wie übermittelt erstellt werden

Nutzer darf DIESE Akte anlegen.

Bestehende Objekte lesen

Nutzer darf DIESE Akte lesen.

Objekte darf wie übermittelt geändert werden

Nutzer darf DIESE Akte ändern.

Bestehende Objekte löschen

Nutzer darf DIESE Akte löschen.

Jeglichen Zugriff auf ein Objekt sperren

Nutzer darf absolut gar nichts mit DIESER Akte tun.

4. Eigenschaften

n.a.

Erlaubt Lesen bestimmter Eigenschaften

Nutzer darf DIESE Eigenschaft der Akte lesen.

Erlaubt Ändern bestimmter Eigenschaften 

Nutzer darf DIESE Eigenschaft an der Akte setzen.

n. a.

Jeglichen Zugriff auf eine Eigenschaft sperren

Nutzer darf absolut gar nichts mit dieser Eigenschaft.

Für Subressourcen gilt:

  1. Die Berechtigungen auf Subressourcen entsprechen den erteilten Berechtigungen auf die übergeordneten Ressourcen, sofern keine abweichende Aussage getroffen wird.

  2. Berechtigungen auf Subressourcen dürfen nicht weitreichender gefasst sein als Berechtigungen auf übergeordnete Ressourcen.

    Das bedeutet z. B.: Besteht kein Updaterecht auf die Ressource /system, kann auch kein Update- Recht auf die Ressource /system/automation erteilt werden.

  3. Berechtigungen auf identifizierenden Subressourcen hängen sowohl von grundlegenden Berechtigungen auf die Ressource als auch von den konkreten Berechtigungen auf das übergeordnete, identifizierte Objekt ab.

Identifizierende Subressourcen (Artikel zu Tickets)

Berechtigungen auf identifizierende Subressourcen stellen eine kleine Besonderheit dar.

Um diese beschreiben zu können, wird der Stern-Platzhalter wie in /ticket/*/articles verwendet. Der Stern hat die gleiche Wirkung wie bspw. im Dateisystem und bedeutet hier: alle Elemente direkt unter /tickets/.

Beispiel:

Das Anlegen eines Artikels an Ticket Nr. 123 erfordert also: 

  • Create- und Update-Recht auf Ressource /tickets

    UND

  • Update-Recht auf Objekt /tickets/123

    UND

  • Create-Recht auf Ressource /tickets/*/articles (im Beispiel mit * == 123)

Basisberechtigungen werden an "umgebenden" Objekten für Businessobjekte hinterlegt. 

Businessobjekte sind Tickets, Assets, FAQ-Artikel, Kontakte und Organisationen. Damit ergeben sich folgende "Paarungen":

  • Tickets und Teams/Queues

  • Assets und Assetklassen

  • FAQ-Artikel und FAQ-Kategorien

  • Kontakte und Organisationen

  • Tickets und Organisationen

Hinweis

Aktuell sind Basisberechtigungen nur für Tickets in Teams/Queues möglich. Mittelfristig wird dieser Ansatz auf weitere Paarungen ausgeweitet.

Basisberechtigungen können nur an Team-Einstellungen gesetzt werden. Sie unterstützen kein DENY, sondern basieren ausschließlich auf Basepermission-Read, Basepermission-Write und Basepermission-Read&Write.

Die Basisberechtigungen für Tickets in Teams (Queues) werden direkt beim Anlegen/Bearbeiten eines Teams erteilt. Dabei werden Rollen ausgewählt und deren jeweiligen Berechtigungen in Bezug auf das Team hinterlegt.

  • Read: erlaubt das Lesen von Tickets in diesem Team.

    Es ist keine Veränderung oder Bearbeitung an dem Ticket möglich.

  • Write: erlaubt das Erstellen und Verschieben von Tickets in diesem Team.

    Das Ticket kann ohne Read im weiteren jedoch nicht eingesehen werden.

  • Read & Write: entspricht einem Vollzugriff.

    Diese Berechtigung wird benötigt um ein Ticket in irgendeiner Weise zu bearbeiten.

Anmerkung

Für die häufigsten Anwendungsfälle wie die Beschränkung des Zugriffs auf Tickets basierend auf der Teamzuordnung des Tickets werden nur die Basisberechtigungen benötigt.

Weiterhin sind die Basisberechtigungen Grundlage für die Ermittlung der an zu erstellenden oder zu bearbeitenden Tickets auswählbaren Teams/Queues und auf diesen basierend auch der Bearbeiter/Verantwortlichen.

Weiterführende Informationen finden Sie unter: Basisberechtigungen

basisberechtigungen_team.png

Abb.: Pflege der Basisberechtigungen im Team Service Desk

Objektberechtigung erlauben eine weitergehende Prüfung des Objekts auf bestimmte Eigenschaften zur Gewährung/Entzug von Berechtigungen. Anwendungsfälle sind u.a.. der Ausschluss von Ticket mit sensiblen Inhalten (z.B. Typ "Incident-Security") oder spezifischer Kundenorganisationen. 

Die HTTP-Methode definiert welche Berechtigung gewährt/entzogen wird.

Bei CREATE/UPDATE erfolgt die Prüfung auf Basis der übermittelten, (neu) zu setzenden Eigenschaften (in der HTTP-Anfrage POST/PATCH).

Bei READ/DELETE werden die im Backend bzw. in der Datenbank bestehenden Eigenschaften verwendet.

Es kann dabei auf verschiedene Eigenschaften geprüft werden. Diese Prüfungen können mit dem logischen UND-Operator && verknüpft werden. Alternative Optionen (ODER-Verknüpfungen) können durch mehrere Berechtigungen abgebildet werden. Des Weiteren kann gegen absolute Werte oder Eigenschaften des ausführenden Nutzers mittels des Platzhalters $CurrentUser geprüft werden. 

  • $CurrentUser.UserID

  • $CurrentUser.UserLogins

  • $CurrentUser.UserComment

  • $CurrentUser.ValidID

  • $CurrentUser.IsAgent

  • $CurrentUser.IsCustomer

  • $CurrentUser.Contact.ID

  • $CurrentUser.Contact.PrimaryOrganisationID

  • $CurrentUser.Contact.OrganisationIDs

  • u. s. w.

Optional besteht die Möglichkeit, Property-Berechtigungen einzuschränken. Mittels IF  können Eigenschaften für bestimmte Objekte definiert werden.

Zulässige Vergleichsoperatoren sind: LT, LTE, GT, GTE, CONTAINS, LIKE, IN, STARTSWITH, ENDSWITH, EQ, NE.  (s. auch: Übersicht der Operatoren)

Die Vergleichsoperatoren können mittels ! negiert werden.

Beispiele zur Prüfung von Objekteigenschaften

# ALLOW full access to ticket
# WHERE title contains "Security"
#   AND priority-ID is 3
Object | /tickets/*{Ticket.Title CONTAINS "Security" && Ticket.PriorityID LT 3} | CRUD-
 
# ALLOW to read tickets
# WHERE SLA is not 5
#   AND team/ueue is not 1,2 or 3
Object | /tickets/*{Ticket.SLAID NE 5 && Ticket.QueueID !IN [1,2,3]} | -R----
 
# ALLOW to read tickets
# WHERE title LIKE "*something*"
Object | /tickets/*{Ticket.Title LIKE "*something*"} | -R----
 
# DO NOT ALLOW ACCESS to tickets
# WHERE contactID differs from current users contact id AND
#   AND tickets organization is not current users primary organisation
Object | /tickets/*{Ticket.ContactID NE $CurrentUser.Contact.ID && Ticket.OrganisationID NE $CurrentUser.Contact.PrimaryOrganisationID} | ------
 
# DO NOT ALLOW ACCESS to articles
# WHERE customer visible flag is not set
Object | /tickets/*/articles/*{Article.CustomerVisible NE1} | -----
 
# ALLOW full access to ticket
# WHERE title contains "Security"
#   AND priority-ID is 3
Object | /tickets/*{Ticket.[PriorityID,StateID] IF Ticket.Title CONTAINS "Security" && Ticket.PriorityID LT 3} | -----

Eigenschaftsberechtigungen wirken nur auf bestehende Objekte. Eine CREATE-Berechtigung kann damit nicht gesetzt oder entzogen werden.

Die optionale Angabe von Eigenschaftsberechtigungen erlaubt die Beschränkung des Zugriffs auf Objektattribute. Um diese angeben zu können, wird Kenntnis der vorhandenen Attribute benötigt.

Im Hinblick auf dynamische Felder können diese in versch. Umgebungen variieren.

Eine konkrete Anwendung erfolgt in Rolle "Customer". Sie schränkt die im Self Service Portal darstellbaren Ticketeigenschaften ein, indem eine White-List definiert wird.

Beispiel Eigenschaftsberechtigungen

# LIMIT shown ticket attributes to the mentioned (line break for improved readability)
Property | /tickets/*{Ticket.[TicketNumber,Age,Articles,Changed,ContactID,Created,CreateTimeUnix,DynamicFields,OrganisationID,PriorityID,QueueID,StateID,TypeID]} | -R---

Rollen werden dadurch definiert, dass sie neben allgemeinen Kopfdaten wie Name, Gültigkeit, Kommentar etc. eine Menge n aus Berechtigungen beinhalten (1: n-Beziehung → 1 Rolle : n Berechtigungen).

Einem Nutzer können mehreren Rollen zugeordnet werden. Die resultierenden Berechtigungen sind dabei die Vereinigungsmenge aller einzelnen Rollenberechtigungen. Ein DENY besitzt dabei stets die höchste Priorität (s. Berechtigungsarten). 

Beispiele: 

Role1    | resource | /resource/xyz/abc | -R--- + Role2  | resource | /resource/xyz/abc | ----- + Role3  | resource | /resource/xyz/abc | C---- = Result | resource | /resource/xyz/abc | CR---

Role1    | resource | /resource/xyz/abc | -R--- + Role2  | resource | /resource/xyz/abc | CRUD- + Role3  | resource | /resource/xyz/abc | ----X = Result | resource | /resource/xyz/abc | ----X

Szenario:

Die Daten und Tickets des Kunden "Secret-Company" dürfen nicht alle Agenten einsehen bzw. es arbeiten nicht alle Agenten für diesen Kunden. 

Lösungsskizze:

Die vordefinierte Rolle "Ticket Agent" könnte verwendet werden, müsste aber eingeschränkt werden. Es wird jedoch auch eine Rolle für Agenten benötigt, die für den Kunden "Secret-Company" tätig sein dürfen. Die Rolle "Ticket Agent" wird daher auf die neue Rolle "Ticket Agent ohne Secret-Company" kopiert.

Im Folgenden wird angenommen, dass die Organisation "Secret-Company" die ID 2 hat. Dadurch definiert sich die Rolle "Ticket Agent ohne Secret-Company" wie folgt (Object-/Template-Action-IDs können variieren). Die ergänzenden Berechtigungen sind mit Kommentar versehen.

Rollendefinition "Ticket Agent ohne Secret-Company"

Resource | /contacts                                         | -R---
Object   | /contacts/*{Contact.PrimaryOrganisationID NE 2}   | -R--- # specific (limit access to contacts not belonging to Org wit ID 2)
Resource | /links                                            | CRUD
Resource | /organisations                                    | -R---
Object   | /organisations/*{Organisation.Number NE "SECRET"} | -R--- # specific (limit access to org. with other Number than "SECRET")
Resource | /system/automation                                | -RU--
Resource | /system/automation/*                              | -----
Resource | /system/automation/macros                         | --U--
Resource | /system/automation/macros/*                       | -----
Resource | /system/communication                             | -R---
Resource | /system/communication/*                           | -----
Resource | /system/communication/channels                    | -R---
Resource | /system/communication/sendertypes                 | -R---
Resource | /system/communication/systemaddresses             | -R---
Resource | /system/objectactions                             | -R---
Resource | /system/objectactions/*                           | -----
Resource | /system/objectactions/2                           | -R---
Resource | /system/objectactions/3                           | -R---
Resource | /system/objectactions/4                           | -R---
Resource | /system/objectactions/6                           | -R---
Resource | /system/slas                                      | -R---
Resource | /system/templates                                 | -R---
Resource | /system/templates/*                               | -----
Resource | /system/templates/4                               | -R---
Resource | /system/templates/5                               | -R---
Resource | /system/templates/7                               | -R---
Resource | /system/textmodules                               | -R---
Resource | /system/ticket                                    | -R---
Object   | /system/ticket/*{Ticket.OrganisationID EQ 2}      | ----- # specific (prohibit access to tickets of Org 2)
Resource | /system/ticket/locks                              | -R---
Resource | /system/ticket/priorities                         | -R---
Resource | /system/ticket/states                             | -R---
Resource | /system/ticket/types                              | -R---

Ressourcenberechtigungen sind erforderlich, um generellen Zugriff bzw. Zugriff auf bestimmte Bereiche der GUI zu erhalten. So wird bspw. mindestens ein READ auf die Ressource /tickets für den Zugriff auf das Ticket-Modul benötigt. Dies gilt ebenso für den Zugriff auf alle anderen Objekte wie FAQ (/faq), Assets (/cmdb) usw.

Die Zugehörigkeit von Nutzern zu Rollen ist Voraussetzung für die Nutzung der konfigurierbaren Ticket- und Artikelaktionen sowie der Ticketvorlagen.

Die Berechtigungen und angezeigten Inhalte eines Kundennutzers im SSP werden durch die Vorgaberolle "Customer" definiert.

Der Zugriff auf Objekte des Assetmanagements wird weiterhin im Backend durch die Konfiguration des Zuordnungs-Mappings definiert und ergänzt das Berechtigungssystem (SysConfig-Schlüssel AssignedConfigItemsMapping).

Tipp

Für die Pflege von Rollen kann auch https://github.com/kix-service-software/kix18sync und Libre Office Calc, MS Excel verwendet werden (CSV, UTF-8 codiert, Semikolon-separiert).

MacOS-Nutzer müssen die spezielle Zeilenende-Kennung beachten welche verwendet wird, wenn CSVs unter MacOS erstellt oder geändert werden.