ForgeOpenPlatform
fr

OpenPlatform

Utilisateurs, groupes et permissions dans OpenPlatform

OpenPlatform · openplatform@5 openplatformusersgroupspermissions

OpenPlatform sépare qui (les utilisateurs), où (les applications) et quoi (les permissions), avec les groupes au milieu :

  • Un utilisateur a un nom, un e-mail, une langue, un mot de passe et des indicateurs (sa pour administrateur, isconfirmed, isdisabled, isinactive, notifications, sounds...) et appartient à un nombre quelconque de groupes (schéma @User, plugins/setup/schemas/users.js).
  • Un groupe a un nom, une couleur, une icône, une reference facultative et une liste de permissions (schéma @Group, plugins/setup/schemas/groups.js).
  • Une application déclare ses propres permissions : chacune a un nom et un value, une simple chaîne que l’application comprend (plugins/setup/schemas/apps.js).

Comment l’accès est calculé

La fonction FUNC.permissions(userid, callback) de definitions/func.js construit, pour un utilisateur :

  1. les groupes de l’utilisateur qui ne sont pas désactivés ;
  2. les lignes de tbl_group_permission de ces groupes : une ligne avec une permission accorde cette permission d’une application, et une ligne sans permission accorde simplement l’application (l’utilisateur la voit et reçoit une liste de permissions vide) ;
  3. le value de chaque permission accordée, seulement pour les applications qui ne sont ni supprimées ni désactivées.

Le résultat comporte trois parties : les applications de l’utilisateur (apps), les valeurs de permission par application (permissions) et les groupes (groups). Il est stocké en JSON dans la colonne cache de l’utilisateur, avec un cachefilter qui liste les groupes (G<id>) et les applications (A<id>) dont il dépend. Quand un groupe ou une application change, FUNC.clearcache(id) vide le cache de chaque utilisateur dont le filtre contient cet identifiant, et la requête suivante le reconstruit.

Où l’application le voit

  • Le portail ne liste que les applications de apps et refuse d’en ouvrir une autre ("App not found").
  • L’application reçoit sa propre liste dans permissions quand elle vérifie un lancement (un tableau de chaînes value), avec les ids des groupes, pour pouvoir décider quoi afficher (comment une app se connecte).
  • L’écran de configuration décide qui peut l’utiliser grâce à l’indicateur sa de l’utilisateur.

Une bonne habitude, tirée du fonctionnement du code : nommez le value d’une permission d’après l’action dans votre application (orders.read, orders.write) et associez les groupes à ces valeurs dans OpenPlatform, pour que votre application ne vérifie que des chaînes.