# Benutzer, Gruppen und Berechtigungen in OpenPlatform

> Wie ein Benutzer in OpenPlatform eine Anwendung erreicht: Gruppen entscheiden, welche Anwendungen der Benutzer sieht und welche Berechtigungswerte jede Anwendung erhält.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: de
Content-SHA256: c28ffd4ba0fb80a072ddce3cee9d3f216bea28e90f03f6eb97aeabb899976323
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

OpenPlatform trennt **wer** (Benutzer), **wo** (Anwendungen) und **was** (Berechtigungen) mit den Gruppen in der Mitte:

- Ein **Benutzer** hat einen Namen, eine E-Mail, eine Sprache, ein Passwort und Flags (`sa` für Administrator, `isconfirmed`, `isdisabled`, `isinactive`, `notifications`, `sounds`...) und gehört beliebig vielen Gruppen an (Schema `@User`, `plugins/setup/schemas/users.js`).
- Eine **Gruppe** hat einen Namen, eine Farbe, ein Icon, eine optionale `reference` und eine Liste von Berechtigungen (Schema `@Group`, `plugins/setup/schemas/groups.js`).
- Eine **Anwendung** deklariert ihre eigenen Berechtigungen: Jede hat einen Namen und einen `value`, eine einfache Zeichenkette, die die Anwendung versteht (`plugins/setup/schemas/apps.js`).

## Wie der Zugriff berechnet wird

Die Funktion `FUNC.permissions(userid, callback)` in `definitions/func.js` baut für einen Benutzer:

1. die Gruppen des Benutzers, die nicht deaktiviert sind;
2. die Zeilen von `tbl_group_permission` dieser Gruppen: Eine Zeile mit einer Berechtigung gewährt diese Berechtigung einer Anwendung, und eine Zeile **ohne** Berechtigung gewährt nur die Anwendung (der Benutzer sieht sie und erhält eine leere Berechtigungsliste);
3. den `value` jeder gewährten Berechtigung, nur für Anwendungen, die nicht entfernt und nicht deaktiviert sind.

Das Ergebnis hat drei Teile: die Anwendungen des Benutzers (`apps`), die Berechtigungswerte je Anwendung (`permissions`) und die Gruppen (`groups`). Es wird als JSON in der Spalte `cache` des Benutzers gespeichert, mit einem `cachefilter`, der die Gruppen (`G<id>`) und Anwendungen (`A<id>`) auflistet, von denen es abhängt. Ändert sich eine Gruppe oder eine Anwendung, leert `FUNC.clearcache(id)` den Cache jedes Benutzers, dessen Filter diese Kennung enthält, und die nächste Anfrage baut ihn neu auf.

## Wo die Anwendung es sieht

- Das Portal listet nur die Anwendungen in `apps` auf und weigert sich, eine andere zu öffnen ("App not found").
- Die Anwendung erhält ihre eigene Liste in `permissions`, wenn sie einen Start verifiziert (ein Array der `value`-Zeichenketten), zusammen mit den Ids der Gruppen, damit sie entscheiden kann, was sie zeigt ([wie sich eine App verbindet](/en/openplatform/how-an-app-connects/)).
- Der Setup-Bildschirm entscheidet über das Flag `sa` des Benutzers, wer ihn nutzen darf.

Eine gute Gewohnheit, die sich aus der Funktionsweise des Codes ergibt: Benennen Sie den `value` einer Berechtigung nach der Aktion in Ihrer Anwendung (`orders.read`, `orders.write`) und ordnen Sie Gruppen in OpenPlatform diesen Werten zu, sodass Ihre Anwendung nur Zeichenketten prüft.
