Utilizadores, grupos e permissões no OpenPlatform
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 (
sapara 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
referenceopcional 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:
- os grupos do utilizador que não estão desativados;
- as linhas de
tbl_group_permissiondesses 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); - o
valuede 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
appse recusa abrir qualquer outra ("App not found"). - A aplicação recebe a sua própria lista em
permissionsquando verifica um lançamento (um array de cadeiasvalue), 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
sado 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.