🗝 Como eu faço as permissões de um usuário em uma API
A etapa de permissões do usuário é muito importante e que na maioria das vezes trazem muitas confusões de como deve ser feita. Abordaremos um proposta usando:
- Permissões
- Grupos de permissões
Criando permissões:
Criar uma tabela/array-fixo que terá todas as permissões disponĂveis no sistema. Ela será importante para criar os grupos de permissões logo em seguida.
[
{
id: "85a738fa-7bf4-4745-93db-01a6e0797035";
name: "Administrador";
code: "*";
options: "*",
createdAt: "2025-08-22 19:23:01.053"
updatedAt: "2025-08-22 19:23:01.053"
},
{
id: "85a738fa-7bf4-4745-93db-01a6e0797035";
name: "Produtos";
code: "produtos";
options: ["create", "update", "delete", "viewAll", "viewDetails"],
createdAt: "2025-08-22 19:23:01.053"
updatedAt: "2025-08-22 19:23:01.053"
},
...
]
Se no grupo de permissões o usuário tiver o objeto com o code: * significa que esse usuário tem todas as permissões, não necessitando colocar os outros objetos.
Criando grupo de permissões:
Quando criar um usuário no sistema, deve também criar um grupo de usuário para ele. Caso o usuário seja "admin", deve ser criar assim:
{
id: "85a738fa-7bf4-4745-93db-01a6e0797011";
name: "Administrator";
code: "*";
permissions: [
{
id: "85a738fa-7bf4-4745-93db-01a6e0797035";
name: "Administrador";
code: "*";
options: "*",
createdAt: "2025-08-22 19:23:01.053"
updatedAt: "2025-08-22 19:23:01.053"
}
],
userId: "85a738fa-7bf4-4745-93db-01a6e0797123",
createdAt: "2025-08-22 19:23:01.053"
updatedAt: "2025-08-22 19:23:01.053"
}
Observação: Caso você queira economizar memória no banco, pode ser criar apenas um grupo de permissões do tipo administrador, fazendo assim um relacionamento entre o usuário e a tabela admin fixa.
Caso o usuário não seja "admin":
{
id: "85a738fa-7bf4-4745-93db-01a6e0799090";
name: "Gerente de produtos";
code: "gerente-de-produtos";
permissions: [
{
id: "85a738fa-7bf4-4745-93db-01a6e0797035";
name: "Produtos";
code: "produtos";
options: ["create", "update", "delete", "viewAll", "viewDetails"],
createdAt: "2025-08-22 19:23:01.053"
updatedAt: "2025-08-22 19:23:01.053"
},
{
id: "85a738fa-7bf4-4745-93db-01a6e0797031";
name: "Métricas";
code: "metricas";
options: ["viewAll", "viewDetails"],
createdAt: "2025-08-22 19:23:01.053"
updatedAt: "2025-08-22 19:23:01.053"
},
...
],
userId: "85a738fa-7bf4-4745-93db-01a6e0797009",
createdAt: "2025-08-22 19:23:01.053"
updatedAt: "2025-08-22 19:23:01.053"
}
Observação: O interessante é deixar o usuário "admin" livre para criar quantos grupos de permissões achar necessário.
Frontend:
Ao fazer login no sistema, a API deve mandar o grupo de permissões que o usuário está, para que o frontend não mostre menus, components e telas que o usuário não tem permissão.
Agradecimento...
Espero que tenham gostado desse conteĂşdo ;)
Github: https://github.com/leodeymison