Entidades do Access Management, árvores de departamentos e de perfis, perfil ativo, permissões no JWT, verificação por pedido e invalidação de sessões.
Esta página explica como o Access Management organiza departamentos, perfis, utilizadores e permissões, e como isso se traduz no token que cada pedido leva.
Entidades
| Entidade | Tabela | Para quê |
|---|---|---|
| Departamento | t_department | Unidade organizacional, em árvore (parent_id) |
| Perfil | t_role | Conjunto de permissões; pertence a um departamento e pode ter um perfil pai (parent) |
| Utilizador | t_user | Pessoa que entra na plataforma; tem um perfil ativo (active_role_id) |
| Atribuição | t_user_role_assignment | Liga um utilizador a um perfil, com data de expiração opcional |
| Permissão | t_permission | Capacidade nomeada (igrp.documento.ler) |
| Aplicação | t_application | Aplicação registada; ligada a departamentos, perfis, recursos e menus |
| Recurso | t_resource | Agrupa permissões de uma aplicação (por exemplo, o recurso de um backend) |
| Entrada de menu | t_menu_entry | Item de menu de uma aplicação, visível a perfis e departamentos |
| Sessão | t_user_session | Sessão no servidor, identificada pelo claim sid do JWT |
Tabelas de ligação: t_role_permission (perfil ↔ permissão), t_permission_department (permissão ↔ departamento), t_department_application, t_application_role, t_application_resource, t_resource_permission e t_department_menuentry.
Departamentos
Os departamentos formam uma árvore: cada um aponta para o pai, sem limite de profundidade.
O departamento não dá permissões a ninguém. Define que permissões estão disponíveis para os perfis desse departamento e dos departamentos abaixo dele.
Perfis
Cada perfil pertence a exatamente um departamento. O código do perfil é único dentro do departamento (dois departamentos podem ter um perfil tecnico). O código de um perfil filho leva o do pai como prefixo: o Técnico criado debaixo do Gestor fica gestor.tecnico.
Os perfis de um departamento também podem formar uma árvore, mas a árvore é uma regra de atribuição, não herança:
- Ao dar permissões a um perfil filho, só são aceites as que o perfil pai já tem.
- E só as que estão disponíveis no departamento do perfil ou num departamento acima.
- Nenhum perfil recebe automaticamente as permissões do pai nem dos filhos.
Permissões
As permissões são globais por nome. A convenção é igrp.{domínio}.{ação} (igrp.documento.ler), mas não é imposta: o nome aceita letras, números, ., _ e -.
Uma permissão chega a um perfil por três passos:
- O backend da aplicação declara-a (
@IgrpPermission) e publica-a no arranque, ligada ao recurso da aplicação — ver Sincronização. - Um administrador torna-a disponível num departamento.
- O administrador dá-a a um perfil desse departamento (ou de um departamento abaixo).
Perfil ativo e permissões efetivas
Um utilizador pode ter vários perfis, em departamentos diferentes, cada um por uma atribuição (que pode expirar). Em cada momento um é o perfil ativo.
- O JWT leva em
permissionssó as permissões diretas do perfil ativo. orgé o código do departamento do perfil ativo.resource_accesslista todos os perfis ativos do utilizador.- Para trocar de perfil ativo:
POST /api/users/me/roles/activecom{ roleCode, departmentCode }(o administrador usaPOST /api/users/{id}/roles/active). A troca revoga as sessões do utilizador: o token seguinte já vem com as permissões do novo perfil.
Claims do JWT
{
"sub": "f3c1…",
"sid": "8a2d…",
"device_id": "c41e…",
"selectedRole": "tecnico",
"org": "SADM",
"permissions": ["igrp.documento.ler", "igrp.documento.criar"],
"resource_access": {
"minha-app": { "roles": ["tecnico", "arquivista"] }
},
"is_super_admin": false,
"email": "maria.silva@exemplo.cv",
"exp": 1793055600,
"iss": "https://<gateway>/igrp-access-management"
}| Claim | Conteúdo |
|---|---|
sid | Sessão no servidor; revogá-la invalida o token no pedido seguinte |
selectedRole, org | Perfil ativo e o departamento dele |
permissions | Permissões diretas do perfil ativo |
resource_access | Perfis do utilizador, por cliente |
is_super_admin | true se alguma atribuição válida for de superadministrador |
name, email, locale, … | Conforme os scopes pedidos no login |
Verificação em cada pedido
Na API do Access Management, cada pedido passa por duas verificações:
Os backends dos projetos validam o JWT e decidem com @PreAuthorize sobre o permissions do token — ver o percurso em Framework › Backend › Permissões.
Invalidação
Cada alteração estrutural publica um evento. Os eventos revogam as sessões afetadas e, nalguns casos, limpam a cache de permissões no Redis:
Como as permissões vão no token, uma alteração só tem efeito com um token novo. A revogação da sessão força isso: o pedido seguinte com o sid antigo recebe 401 e a aplicação volta a autenticar o utilizador.
Cenário completo
- Os Serviços Administrativos (
SADM) têm o perfil Técnico, comigrp.documento.lereigrp.documento.criar. O Arquivo (ARQ), filho deSADM, tem o perfil Arquivista, comigrp.arquivo.consultar. - A Maria Silva tem os dois perfis atribuídos, com o Técnico ativo. O token dela leva as permissões do Técnico e
org: SADM. - Para consultar o arquivo, troca o perfil ativo para Arquivista. As sessões são revogadas e o token novo leva
igrp.arquivo.consultareorg: ARQ— e já não as permissões do Técnico.
Resumo
| Conceito | Regra |
|---|---|
| Departamento | Árvore sem limite de profundidade; define as permissões disponíveis para os seus perfis e os dos departamentos abaixo |
| Perfil | Pertence a um departamento; código único dentro dele |
| Árvore de perfis | Restrição: o filho só recebe permissões que o pai tem. Não há herança |
| Utilizador | Vários perfis por atribuição (com expiração opcional); um perfil ativo |
| Permissões no JWT | Só as diretas do perfil ativo; org é o departamento dele |
| Troca de perfil | Revoga as sessões; o token seguinte traz as permissões do novo perfil |
| Nome das permissões | Convenção igrp.{domínio}.{ação}, global, não imposta |
| Invalidação | Alterações estruturais revogam as sessões afetadas; algumas também limpam a cache de permissões |
Última atualização:
