Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Relação entre perfil, roles e permissões

Fiquei em dúvida sobre a estrutura relacional entre usuários, roles e permissões. Vi que no vídeo o 'João', usuário cadastrado pelo instrutor, possui a role 'Gerente' e possui apenas a permissão para 'Editar' produtos.

Porém em outras aulas a role 'Gerente' foi associada a todas as demais permissões cadastradas (listar, editar, adicionar e remover). Neste caso, já que 'João está atrelado à role 'Gerente', ele não deveria, por consequência, ter todas permissões associadas à role 'Gerente'?

1 resposta
solução!

Oi Gabriel! Tudo bem?

Na arquitetura que você está estudando, temos três conceitos principais:

  1. Usuário: Representa a pessoa que está utilizando o sistema.
  2. Role (Papel): Representa o conjunto de permissões que um usuário pode ter. Exemplos de roles são "Gerente" e "Vendedor".
  3. Permissão: Representa a ação específica que um usuário pode realizar, como "listar", "editar", "adicionar" e "remover".

Como funciona a relação entre eles?

  1. Usuário: Cada usuário pode ter uma ou mais roles associadas.
  2. Role: Cada role pode ter uma ou mais permissões associadas.
  3. Permissão: As permissões são ações específicas que podem ser atribuídas diretamente a um usuário ou através de uma role.

O caso do João

No seu exemplo, o usuário João tem a role de "Gerente". Em teoria, a role "Gerente" deveria ter todas as permissões (listar, editar, adicionar e remover). No entanto, parece que, no contexto do seu projeto, as permissões podem ser atribuídas individualmente a cada usuário, independentemente da role.

Isso significa que, mesmo que João tenha a role "Gerente", ele pode ter apenas a permissão de "editar" produtos, se assim for configurado.

Como resolver isso?

Para garantir que todos os usuários com a role "Gerente" tenham todas as permissões associadas a essa role, você pode fazer o seguinte:

  1. Definir as permissões da role no banco de dados: Certifique-se de que a role "Gerente" tenha todas as permissões necessárias associadas a ela no banco de dados.

  2. Atribuir permissões automaticamente ao usuário com base na role: Quando um usuário é atribuído a uma role, você pode automaticamente conceder todas as permissões dessa role ao usuário. Isso pode ser feito no momento do cadastro ou atualização do usuário.

Exemplo Prático

Suponha que você tenha uma tabela roles e uma tabela permissoes. Você pode ter uma tabela intermediária role_permissoes para associar roles e permissões.

-- Tabela roles
CREATE TABLE roles (
    id INT PRIMARY KEY,
    nome VARCHAR(50)
);

-- Tabela permissoes
CREATE TABLE permissoes (
    id INT PRIMARY KEY,
    nome VARCHAR(50)
);

-- Tabela intermediária role_permissoes
CREATE TABLE role_permissoes (
    role_id INT,
    permissao_id INT,
    FOREIGN KEY (role_id) REFERENCES roles(id),
    FOREIGN KEY (permissao_id) REFERENCES permissoes(id)
);

-- Exemplo de inserção de permissões para a role Gerente
INSERT INTO role_permissoes (role_id, permissao_id) VALUES (1, 1); -- listar
INSERT INTO role_permissoes (role_id, permissao_id) VALUES (1, 2); -- editar
INSERT INTO role_permissoes (role_id, permissao_id) VALUES (1, 3); -- adicionar
INSERT INTO role_permissoes (role_id, permissao_id) VALUES (1, 4); -- remover

Atualizando as permissões do usuário

Quando um usuário é atribuído a uma role, você pode buscar todas as permissões dessa role e atribuí-las ao usuário:

const usuario = await database.usuarios.findOne({ where: { id: usuarioId } });
const role = await database.roles.findOne({ where: { id: usuario.roleId }, include: ['permissoes'] });

const permissoes = role.permissoes.map(permissao => permissao.nome);
usuario.permissoes = permissoes;
await usuario.save();

Dessa forma, você garante que todos os usuários com a role "Gerente" terão automaticamente todas as permissões associadas a essa role.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.