Pergunta

Estou desenvolvendo um site asp.net intranet com um ActiveDirectoryMembershipProvider e uma SqlProfileProvider.

Um dos requisitos do meu site é ter uma página "Aniversários", o que exigiria me para listar todos os perfis e recuperar as informações de aniversário dela.

Eu abordou o problema da seguinte forma:

    método estático
  • invocar o Membership.GetAllUsers ();
  • percorrer a lista de usuários e recuperar o perfil de nome de usuário do membro

Esta abordagem, no entanto, não pelas seguintes razões:

  • O webapp está representando o atual usuário conectado para recuperar seus detalhes AD (identity impersonate = "true" no web.config), então eu recebo uma exceção "acesso negado" ao tentar invocar as GetAllUsers
  • Se eu tentar fazer o impersonate webapp uma conta de super usuário, em seguida, AD retorna os nomes de usuário como formato username @ domain-name, mas no meu provedor de perfil foram inicialmente armazenadas como domain-name \ formato de username.

Então, como você ir ao redor este problema para recuperar toda a lista de perfis para qualquer membro da organização?

Foi útil?

Solução 2

Outras dicas

Embora eu nunca tenha feito isso antes, você poderia tentar criar um contexto de representação secundária, que, quando estabelecido, a chamada para GetAllUsers deve ter êxito.

Tenha um olhar em http://chiragrdarji.blogspot.com /2007/03/impersonation-using-code.html , esse cara parece ter alcançado uma mudança no contexto de segurança usando classe System.Security.Principal.WindowsIdentity juntamente com System.Security.Principal.WindowsImpersonationContext. Talvez valesse a pena conferir.

ProfileInfoCollection profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All);
foreach (ProfileInfo pi in profiles)
{
    ProfileCommon p = Profile.GetProfile(pi.UserName);
    countries.Add(p.Country);        
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top