1
resposta

Hierarquia de autorizações

Estou querendo implementar o Identity numa estrutura hierarquizada de autorizações. Assisti ao curso, mas essa funcionalidade não ficou muito clara para mim.

Perfis hierarquizados de exemplo:

1-SuperAdmi >  Admin  > EmitirRelatorio> ArtigoAdmin;

2-Admin  > CadastrarAluno;

3-AdminSistemaB>ManagerEdital>EmitirRelatorio>EmitirRelatorioSimples

DÚVIDA 1: Com posso montar essa estrutura de perfis hierarquizadas? Uso Roles, Claims?

DÚVIDA 2: Permitir a um usuário ter uma lista de perfis: Usuário <-->Perfil

DÚVIDA 3: Como autorizar acesso a uma controladora DIRETAMENTE com perfil "EmitirRelatorio" e automaticamente autorizar os perfis acima dela: "AdminSistemaB" , "ManagerEdital", "SuperAdmi" e "Admin".Ex1: Um usuário com os perfis: "EmitirRelatorioSimples", "CadastrarAluno" e "Admin" teria acesso a uma controladora com restrição , "EmitirRelatorio",por possuir o perfil "Admin". Ex2: Um usuário com os perfis: "SuperAdmi " e "AdminSistemaB" teria acesso a uma controladora com restrição, "CadastrarAluno", possuir o perfil "SuperAdmi".

Não precisa necessariamente me passar o código, basta uma direção de quais elementos Identity devo utilizar que o restante eu me viro...

Att,

Eduardo G. Santos

1 resposta

Oi Eduardo, tudo bem?

DÚVIDA 1: Com posso montar essa estrutura de perfis hierarquizadas? Uso Roles, Claims?

Você teria que criar um mecanismo de funções (Roles) hierárquicas, pois as classe do Identity não possuem essa estrutura. Mas não sei se vale a pena o trabalho. Acredito que dá pra trabalhar sem hierarquia de Roles.

DÚVIDA 2: Permitir a um usuário ter uma lista de perfis: Usuário <-->Perfil

DÚVIDA 3: Como autorizar acesso a uma controladora DIRETAMENTE com perfil "EmitirRelatorio" e automaticamente autorizar os perfis acima dela: "AdminSistemaB" , "ManagerEdital", "SuperAdmi" e "Admin".Ex1: Um usuário com os perfis: "EmitirRelatorioSimples", "CadastrarAluno" e "Admin" teria acesso a uma controladora com restrição , "EmitirRelatorio",por possuir o perfil "Admin". Ex2: Um usuário com os perfis: "SuperAdmi " e "AdminSistemaB" teria acesso a uma controladora com restrição, "CadastrarAluno", possuir o perfil "SuperAdmi".

Você teria que customizar essa solução, talvez usando policies. Por exemplo:

[Authorize(Policy = "EmitirRelatorio")]
public IActionResult EmitirRelatorio()
{
    //código para emitir o relatório
}

Nesse caso, você poderia configurar a policy "EmitirRelatorio" exigindo que o usuário logado tenha um "Claim" chamado "EmitirRelatorio". Se ele não tiver esse Claim, o acesso será negado.

Você pode ver neste documento como implementar um esquema simples de configuração de policies:

https://docs.microsoft.com/pt-br/aspnet/core/security/authorization/claims?view=aspnetcore-2.2

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software