Benutzer, Gruppen und Berechtigungen in OpenPlatform
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 (
safü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
referenceund 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:
- die Gruppen des Benutzers, die nicht deaktiviert sind;
- die Zeilen von
tbl_group_permissiondieser 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); - den
valuejeder 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
appsauf 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 dervalue-Zeichenketten), zusammen mit den Ids der Gruppen, damit sie entscheiden kann, was sie zeigt (wie sich eine App verbindet). - Der Setup-Bildschirm entscheidet über das Flag
sades 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.