ForgeOpenPlatform
pt

OpenPlatform

Utilizadores, grupos e permissões no OpenPlatform

OpenPlatform · openplatform@5 openplatformusersgroupspermissions

O OpenPlatform separa quem (utilizadores), onde (aplicações) e o quê (permissões) com os grupos no meio:

  • Um utilizador tem nome, e-mail, idioma, palavra-passe e indicadores (sa para administrador, isconfirmed, isdisabled, isinactive, notifications, sounds...) e pertence a qualquer número de grupos (esquema @User, plugins/setup/schemas/users.js).
  • Um grupo tem nome, cor, ícone, uma reference opcional e uma lista de permissões (esquema @Group, plugins/setup/schemas/groups.js).
  • Uma aplicação declara as suas próprias permissões: cada uma tem um nome e um value, uma cadeia simples que a aplicação entende (plugins/setup/schemas/apps.js).

Como o acesso é calculado

A função FUNC.permissions(userid, callback) em definitions/func.js constrói, para um utilizador:

  1. os grupos do utilizador que não estão desativados;
  2. as linhas de tbl_group_permission desses grupos: uma linha com uma permissão concede essa permissão de uma aplicação, e uma linha sem permissão só concede a aplicação (o utilizador vê-a e recebe uma lista de permissões vazia);
  3. o value de cada permissão concedida, apenas para aplicações que não estão removidas nem desativadas.

O resultado tem três partes: as aplicações do utilizador (apps), os valores de permissão por aplicação (permissions) e os grupos (groups). É guardado como JSON na coluna cache do utilizador, com um cachefilter que lista os grupos (G<id>) e as aplicações (A<id>) de que depende. Quando um grupo ou uma aplicação muda, FUNC.clearcache(id) limpa a cache de todo o utilizador cujo filtro contenha esse identificador, e o pedido seguinte reconstrói-a.

Onde a aplicação a vê

  • O portal lista apenas as aplicações em apps e recusa abrir qualquer outra ("App not found").
  • A aplicação recebe a sua própria lista em permissions quando verifica um lançamento (um array de cadeias value), juntamente com os ids dos grupos, para poder decidir o que mostrar (como uma app se liga).
  • O ecrã de configuração decide quem o pode usar pelo indicador sa do utilizador.

Um bom hábito, pela forma como o código funciona: dê ao value de uma permissão o nome da ação na sua aplicação (orders.read, orders.write) e associe os grupos a esses valores no OpenPlatform, de modo que a sua aplicação só verifique cadeias.