# Användare, grupper och behörigheter i OpenPlatform

> Hur en användare når en applikation i OpenPlatform: grupper avgör vilka applikationer användaren ser och vilka behörighetsvärden varje applikation får.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: sv
Content-SHA256: 509825c82ee0527bf11ea4b57f1a606edf976f91294ce462c222ee28e02dfb83
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

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 (`sa` fö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 `reference` och 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:

1. användarens grupper som inte är inaktiverade;
2. raderna i `tbl_group_permission` fö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);
3. `value` fö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 `apps` och vägrar öppna någon annan ("App not found").
- Applikationen får sin egen lista i `permissions` när den verifierar en start (en array av `value`-strängar), tillsammans med gruppernas id:n, så att den kan avgöra vad som ska visas ([hur en app ansluter](/en/openplatform/how-an-app-connects/)).
- 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.
