Pergunta

Quero restringir o acesso a um URL específico, a menos que o usuário seja um membro de 2 funções diferentes. Nesse caso, eu só quero conceder acesso a este URL se o usuário estiver nos dois relatórios E Papel de arquivamento. Existe uma maneira de fazer isso no Asp.net?

<location path="testpage.aspx">
<system.web>
  <authorization>
    <allow roles="Reporting, Archiving"/>
    <deny users="*"/>
  </authorization>
</system.web>

Eu quero algo assim:

<location path="testpage.aspx">
<system.web>
  <authorization>
    <allow roles="Reporting & Archiving"/>
    <deny users="*"/>
  </authorization>
</system.web>

Foi útil?

Solução

É meio feio, mas você pode herdar do provedor de função que está usando atualmente (SQLROLEPROVER, WindowstokenRoleProvider, AuthorizationStoreRoleProvider), substitui o GetRolesforuser, chama a implementação base para obter as funções e combiná -las conforme necessário lá. Então obviamente coloque seu provedor de função personalizado em seu web.config nou003CroleManager> Seção de configuração.

Você só precisaria substituir o método único (e talvez getUsersinRole) e combiná -los conforme necessário.

public override string[] GetRolesForUser( string username ) {
    List<string> roles = new List<string>( base.GetRolesForUser(username) );
    if( roles.Contains("Reporting") && roles.Contains("Archiving") ) {
        roles.Add("ReportingAndArchiving");
    }
    return roles.ToArray();
}

Outras dicas

Você pode criar uma função SQL que, dada um ID de usuário específico, URL da página e lista de funções permitidas (XML), retorna um pouco indicando se o acesso é concedido a esse URL e, posteriormente para mostrar isso como uma opção válida em um menu JavaScript ou DHTML ou qualquer outra coisa.

Você pode Implementar provedor de função personalizado. Em seguida, você pode definir uma nova função "falsa" relatando marchiving e verificar se o usuário pertence à função de relatórios e arquivamento dentro do método IsuserinRole quando a função de relatório de marquinho é solicitada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top