ProfileProvider: lista de todos os perfis de recuperar
-
05-07-2019 - |
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?
Solução 2
Há uma ProfileManager com o um GetAllProfiles método ():
http://msdn.microsoft .com / en-us / library / system.web.profile.profilemanager.getallprofiles.aspx
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);
}