Gebruikers, groepen en rechten in OpenPlatform
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 (
savoor 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
referenceen 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:
- de groepen van de gebruiker die niet zijn uitgeschakeld;
- de rijen van
tbl_group_permissionvan 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); - de
valuevan 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
appsen weigert er een andere te openen ("App not found"). - De toepassing ontvangt haar eigen lijst in
permissionswanneer ze een start verifieert (een array vanvalue-tekenreeksen), samen met de id’s van de groepen, zodat ze kan beslissen wat ze toont (hoe een app verbinding maakt). - Het setup-scherm bepaalt wie het mag gebruiken via de vlag
savan 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.