ForgeOpenPlatform
nl

OpenPlatform

Gebruikers, groepen en rechten in OpenPlatform

OpenPlatform · openplatform@5 openplatformusersgroupspermissions

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).
  • 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.