Como implementar segurança baseada papel usando Dynamic Data e Active Directory?
-
03-07-2019 - |
Pergunta
O que é a melhor maneira de implementar a segurança usando funções do Active Directory em um site dinâmico de dados asp.net?
Gostaria de restringir certos pontos de vista (e os links relacionados) para determinadas funções. isto é, o utilizador A só pode exibir acções de tabela para a tabela e o utilizador B x só pode exibir acções de tabela para a tabela y
Solução
Eu tenho um número de artigos sobre isso no meu blogue aqui A DynamicData Atributo baseado em permissão solução usando funções de usuário e aqui DynamicData: Banco de Dados permissões com base - Parte 1 e eu também teria alook em amostra Protegendo dados dinâmicos no CodePlex que usa um manipulador de rota .
Outras dicas
Eu tenho feito isso em muitas aplicações.
Autenticação têm janelas habilitado para a sua aplicação.
Faça algum objeto que possa armazenar as credenciais do usuário e ter esse objeto armazenado na sessão para retreival rápido. Se ele não estiver lá, você pode rapidamente reconstruí-lo. Eu costumo ter cada papéis definida para um pouco por exemplo:
enum USER_ROLE : int
{
Role1 = 1,
Role2 = 2,
Role3 = 4,
Role4 = 8,
etc
}
if (Context.User.IsInRole("Roll1Name")) YourUserObject.Roles += USER_ROLE.Role1;
if (Context.User.IsInRole("Roll2Name")) YourUserObject.Roles += USER_ROLE.Role2;
etc
Em seguida, sempre que um controle precisa ser protegido, eu passá-lo em uma função que leva um HtmlControl e uma propriedade com base na função do usuário e o requisito de segurança para esse controle.
Por exemplo. bool SetControlSecurity (HtmlControl ctrl, iUserRoles int, iControlRoles int, AÇÃO eAction)
Assim, um exemplo para fazer um painel poderia ser:
SetControlSecurity (pnlUserInfo, YourUserObject.Roles, eRole.Role2, ACTION.Hide);
Normalmente, eu também tenho que tomar em um param com o tipo de ação a ser executada em falha de segurança como esconder, somente leitura, os dados claro, etc ...
Comparando o papel na função é fácil:
bool bHasAccess = ((iUserRole & iControlRoles) > 0);
if (bHasAcess)
{
// leave the control or make sure it is visible etc
}
else
{
// take action to secure the control based on the action
}
Espero que ajude.
Você pode simplesmente usar o ASP.NET Active Directory Memebrship e provedores de função para autenticar \ autorizar os usuários para o aplicativo. Em seguida, você pode chamar o Roles.IsUserInRole onde quer que você queira dar uma olhada para a associação de função AD para verificar os usuários são uma parte do grupo relevante (s) antes de processar o conteúdo.