Användare, grupper och behörigheter i OpenPlatform
OpenPlatform skiljer vem (användare), var (applikationer) och vad (behörigheter) åt, med grupperna i mitten:
- En användare har ett namn, en e-postadress, ett språk, ett lösenord och flaggor (
saför administratör,isconfirmed,isdisabled,isinactive,notifications,sounds...) och tillhör valfritt antal grupper (schemat@User,plugins/setup/schemas/users.js). - En grupp har ett namn, en färg, en ikon, en valfri
referenceoch en lista med behörigheter (schemat@Group,plugins/setup/schemas/groups.js). - En applikation deklarerar sina egna behörigheter: var och en har ett namn och ett
value, en vanlig sträng som applikationen förstår (plugins/setup/schemas/apps.js).
Hur åtkomsten beräknas
Funktionen FUNC.permissions(userid, callback) i definitions/func.js bygger för en användare:
- användarens grupper som inte är inaktiverade;
- raderna i
tbl_group_permissionför de grupperna: en rad med en behörighet ger den behörigheten för en applikation, och en rad utan behörighet ger bara applikationen (användaren ser den och får en tom lista med behörigheter); valueför varje beviljad behörighet, bara för applikationer som inte är borttagna och inte inaktiverade.
Resultatet har tre delar: användarens applikationer (apps), behörighetsvärdena per applikation (permissions) och grupperna (groups). Det lagras som JSON i användarens kolumn cache, med ett cachefilter som listar de grupper (G<id>) och applikationer (A<id>) det beror på. När en grupp eller applikation ändras rensar FUNC.clearcache(id) cachen för varje användare vars filter innehåller den identifieraren, och nästa begäran bygger upp den igen.
Var applikationen ser det
- Portalen listar bara applikationerna i
appsoch vägrar öppna någon annan ("App not found"). - Applikationen får sin egen lista i
permissionsnär den verifierar en start (en array avvalue-strängar), tillsammans med gruppernas id:n, så att den kan avgöra vad som ska visas (hur en app ansluter). - Setup-skärmen avgör vem som får använda den genom användarens flagga
sa.
En bra vana, som följer av hur koden fungerar: döp value för en behörighet efter åtgärden i din applikation (orders.read, orders.write) och koppla grupper till de värdena i OpenPlatform, så att din applikation bara kontrollerar strängar.