# Gebruikers, groepen en rechten in OpenPlatform

> Hoe een gebruiker een toepassing bereikt in OpenPlatform: groepen bepalen welke toepassingen de gebruiker ziet en welke rechtenwaarden elke toepassing ontvangt.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: nl
Content-SHA256: 9a0f80ad852ac2d629fb9da84eed9d052dd0fbc601ded56ea9bd652180708c1a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

OpenPlatform scheidt **wie** (gebruikers), **waar** (toepassingen) en **wat** (rechten), met de groepen in het midden:

- Een **gebruiker** heeft een naam, een e-mail, een taal, een wachtwoord en vlaggen (`sa` voor beheerder, `isconfirmed`, `isdisabled`, `isinactive`, `notifications`, `sounds`...) en hoort bij een willekeurig aantal groepen (schema `@User`, `plugins/setup/schemas/users.js`).
- Een **groep** heeft een naam, een kleur, een icoon, een optionele `reference` en een lijst met rechten (schema `@Group`, `plugins/setup/schemas/groups.js`).
- Een **toepassing** declareert haar eigen rechten: elk heeft een naam en een `value`, een gewone tekenreeks die de toepassing begrijpt (`plugins/setup/schemas/apps.js`).

## Hoe de toegang wordt berekend

De functie `FUNC.permissions(userid, callback)` in `definitions/func.js` bouwt voor een gebruiker:

1. de groepen van de gebruiker die niet zijn uitgeschakeld;
2. de rijen van `tbl_group_permission` van die groepen: een rij met een recht geeft dat recht van een toepassing, en een rij **zonder** recht geeft alleen de toepassing (de gebruiker ziet haar en ontvangt een lege lijst met rechten);
3. de `value` van elk verleend recht, alleen voor toepassingen die niet zijn verwijderd en niet zijn uitgeschakeld.

Het resultaat heeft drie delen: de toepassingen van de gebruiker (`apps`), de rechtenwaarden per toepassing (`permissions`) en de groepen (`groups`). Het wordt als JSON opgeslagen in de kolom `cache` van de gebruiker, met een `cachefilter` die de groepen (`G<id>`) en toepassingen (`A<id>`) opsomt waarvan het afhangt. Wanneer een groep of toepassing verandert, wist `FUNC.clearcache(id)` de cache van elke gebruiker wiens filter die identificatie bevat, en het volgende verzoek bouwt hem opnieuw op.

## Waar de toepassing het ziet

- Het portaal toont alleen de toepassingen in `apps` en weigert er een andere te openen ("App not found").
- De toepassing ontvangt haar eigen lijst in `permissions` wanneer ze een start verifieert (een array van `value`-tekenreeksen), samen met de id’s van de groepen, zodat ze kan beslissen wat ze toont ([hoe een app verbinding maakt](/en/openplatform/how-an-app-connects/)).
- Het setup-scherm bepaalt wie het mag gebruiken via de vlag `sa` van de gebruiker.

Een goede gewoonte, volgend uit hoe de code werkt: noem de `value` van een recht naar de actie in je toepassing (`orders.read`, `orders.write`) en koppel groepen in OpenPlatform aan die waarden, zodat je toepassing alleen tekenreeksen controleert.
