ForgeOpenPlatform
es

OpenPlatform

Usuarios, grupos y permisos en OpenPlatform

OpenPlatform · openplatform@5 openplatformusersgroupspermissions

OpenPlatform separa quién (usuarios), dónde (aplicaciones) y qué (permisos) con los grupos en medio:

  • Un usuario tiene nombre, correo, idioma, contraseña y banderas (sa para administrador, isconfirmed, isdisabled, isinactive, notifications, sounds...) y pertenece a cualquier número de grupos (esquema @User, plugins/setup/schemas/users.js).
  • Un grupo tiene nombre, color, icono, una reference opcional y una lista de permisos (esquema @Group, plugins/setup/schemas/groups.js).
  • Una aplicación declara sus propios permisos: cada uno tiene un nombre y un value, una cadena simple que la aplicación entiende (plugins/setup/schemas/apps.js).

Cómo se calcula el acceso

La función FUNC.permissions(userid, callback) de definitions/func.js construye, para un usuario:

  1. los grupos del usuario que no están deshabilitados;
  2. las filas de tbl_group_permission de esos grupos: una fila con un permiso concede ese permiso de una aplicación, y una fila sin permiso solo concede la aplicación (el usuario la ve y recibe una lista de permisos vacía);
  3. el value de cada permiso concedido, solo para aplicaciones que no estén eliminadas ni deshabilitadas.

El resultado tiene tres partes: las aplicaciones del usuario (apps), los valores de permiso por aplicación (permissions) y los grupos (groups). Se guarda como JSON en la columna cache del usuario, con un cachefilter que lista los grupos (G<id>) y las aplicaciones (A<id>) de los que depende. Cuando cambia un grupo o una aplicación, FUNC.clearcache(id) borra la caché de todo usuario cuyo filtro contenga ese identificador, y la siguiente petición la reconstruye.

Dónde la ve la aplicación

  • El portal lista solo las aplicaciones de apps y se niega a abrir cualquier otra ("App not found").
  • La aplicación recibe su propia lista en permissions cuando verifica un lanzamiento (un array de cadenas value), junto con los ids de los grupos, para poder decidir qué mostrar (cómo se conecta una app).
  • La pantalla de configuración decide quién puede usarla por la bandera sa del usuario.

Un buen hábito, por cómo funciona el código: nombra el value de un permiso según la acción de tu aplicación (orders.read, orders.write) y asigna los grupos a esos valores en OpenPlatform, de modo que tu aplicación solo compruebe cadenas.