ProfileProvider: recupera l'elenco di tutti i profili
-
05-07-2019 - |
Domanda
Sto sviluppando un sito Web intranet asp.net con un ActiveDirectoryMembershipProvider e un SqlProfileProvider.
Uno dei requisiti del mio sito Web è di avere un " Compleanni " pagina, che mi richiederebbe di elencare tutti i profili e di recuperare le informazioni sul compleanno da esso.
Ho affrontato il problema come segue:
- Richiama il metodo statico Membership.GetAllUsers ();
- Scorrere l'elenco degli utenti e recuperare il profilo dal nome utente del membro
Questo approccio, tuttavia, non è riuscito per i seguenti motivi:
- La webapp sta impersonando l'utente attualmente registrato per recuperare i suoi dettagli AD (identità impersonata = "vero" nel web.config), quindi ottengo un'eccezione "accesso negato" quando si tenta di richiamare GetAllUsers
- Se provo a fare in modo che la webapp rappresenti un account superutente, AD restituisce i nomi utente come nome utente @ formato nome dominio, ma nel mio fornitore del profilo sono stati inizialmente memorizzati come formato nome dominio \ nome utente.
Quindi, come aggireresti questo problema per recuperare l'intero elenco di profili per qualsiasi membro dell'organizzazione?
Soluzione 2
Esiste un ProfileManager con il metodo a GetAllProfiles ():
http://msdn.microsoft .com / it-it / library / system.web.profile.profilemanager.getallprofiles.aspx
Altri suggerimenti
Anche se non l'ho mai fatto prima, potresti provare a creare un contesto di rappresentazione secondario, che una volta stabilita, la chiamata a GetAllUsers
dovrebbe avere successo.
Dai un'occhiata a http://chiragrdarji.blogspot.com /2007/03/impersonation-using-code.html , questo tipo sembra aver ottenuto un cambiamento nel contesto della sicurezza usando la classe System.Security.Principal.WindowsIdentity
insieme a System.Security.Principal.WindowsImpersonationContext
. Potrebbe valere la pena dare un'occhiata.
ProfileInfoCollection profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All);
foreach (ProfileInfo pi in profiles)
{
ProfileCommon p = Profile.GetProfile(pi.UserName);
countries.Add(p.Country);
}