Como faço para definir uma função padrão para um novo usuário usando autenticação do Windows com o SqlRoleProvider?

votos
1

Eu tenho um aplicativo que está usando autenticação do Windows e uma SqlRoleProvider para autenticação de usuários e gerenciamento de funções, respectivamente. Ele está funcionando bem com os meus usuários de teste que eu tenho adicionado ao banco de dados como padrão. O aplicativo requer os usuários façam login (usando credenciais do Windows) e, em seguida, ser capaz de usar esta aplicação interna como um usuário básico. Se o usuário precisa ser adicionado a uma função de alto nível, um administrador seria responsável por este após o primeiro login.

Com isso dito, como eu gostaria de acrescentar um usuário à função padrão quando eles log in? Logicamente, eu sei que eu preciso chamar Roles.IsUserInRole () e, em seguida, adicioná-los se eles não são; no entanto, onde eu iria fazer isso? Estou tendo problemas para localizar qual evento no Global.asax para usar.

obrigado

EDIT: Para expandir o cenário um pouco, eu não estou usando um sistema de provedor de associação completo devido às exigências sobre a escrita de novos fornecedores para permitir que a seqüência de conexão para ser armazenado fora do web.config. Eu não estou usando qualquer forma de registro ou página de login e deixando a autenticação integrada do Windows no IIS lidar com os aspectos de autenticação enquanto meu SqlRoleProvider reforçada gere as funções de usuário. O sistema está funcionando bem para os usuários que têm funções de configuração via testes codificados duros. Eu estou apenas procurando uma maneira de adicionar novos usuários (que iria ser autenticado pelo IIS) para ser imediatamente adicionada a um padrão Users papel. Eu acho que eu achei; no entanto, estou agora a estudar formas para torná-lo não disparar contra todos os pedidos por razões de desempenho.

Publicado 09/12/2008 em 21:13
fonte usuário
Em outras línguas...                            


3 respostas

votos
0

Eu acrescentaria o papel padrão para o usuário diretamente depois que o usuário foi buscado.

Algo como tal:

user = Membership.GetUser()
if (user != null)
{
  // default role 
  string[] defaultRoles = {"MyRole"};

  AddUsersToRoles(user, defaultRoles); 

}
Respondeu 09/12/2008 em 21:23
fonte usuário

votos
1

Eu era capaz de localizar a solução depois de cavar e brincar um pouco mais. Eu adicionei o seguinte código para o meu arquivo global e é realizar o que eu estou esperando.

protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
    if (!Roles.IsUserInRole(e.Identity.Name, "Users"))
    {
        Roles.AddUsersToRole(new string[] { e.Identity.Name }, "Users");
    }
}

Estou preocupado uma vez que este fogos de código com cada solicitação de página. Existe uma maneira melhor para limitar quando isso ocorre? Devo apenas adicionar este código ao evento Page_Load da página de destino em vez do Global.asax?

Respondeu 09/12/2008 em 21:51
fonte usuário

votos
0

Por que não colocá-lo quando o login ou registre-se?

Quando o login, lidar com esse evento e colocar isso em. Verifique cada vez que iniciar sessão.

Respondeu 09/12/2008 em 22:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more