Existe-t-il un moyen d'obtenir la liste des rôles d'un utilisateur authentifié Windows, sans vérifier explicitement par la méthode WindowsPrincipal.IsInRole
?Comment puis-je récupérer tous les rôles (groupes) dont un utilisateur est membre?
Répondre
WindowsPrincipal.IsInRole
vérifie simplement si l'utilisateur est un membre du groupe portant ce nom; un groupe Windows est un rôle. Vous pouvez obtenir la liste des groupes dont un utilisateur est membre depuis la propriété WindowsIdentity.Groups
.
Vous pouvez obtenir WindowsIdentity
de votre WindowsPrincipal
:
WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;
ou vous pouvez l'obtenir à partir d'une méthode de fabrication sur WindowsIdentity:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsIdenity.Groups
est une collection de IdentityReference
qui vous donne juste le SID du groupe. Si vous avez besoin des noms de groupe, vous devrez traduire le IdentityReference
dans un NTAccount
et obtenir la valeur:
var groupNames = from id in identity.Groups
select id.Translate(typeof(NTAccount)).Value;
EDIT: Josh me battre pour elle! :)
Essayez cette
using System;
using System.Security.Principal;
namespace ConsoleApplication5
{
internal class Program
{
private static void Main(string[] args)
{
var identity = WindowsIdentity.GetCurrent();
foreach (var groupId in identity.Groups)
{
var group = groupId.Translate(typeof (NTAccount));
Console.WriteLine(group);
}
}
}
}
Si vous n'êtes pas connecté au serveur de domaine, la fonction Traduire peut lancer une exception « //The trust relationship between this workstation and the primary domain failed.
» Mais pour la plupart des groupes, ce sera OK, personellement J'utilise:
foreach(var s in WindowsIdentity.GetCurrent().Groups) {
try {
IdentityReference grp = s.Translate(typeof (NTAccount));
groups.Add(grp.Value);
}
catch(Exception) { }
}
Ceci est LA réponse. –
Dans un site ASP.NET MVC, vous pouvez le faire comme ceci:
Ajouter à votre web.config:
<system.web>
...
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
...
</system.web>
Ensuite, vous pouvez utiliser Roles.GetRolesForUser()
pour obtenir tous les groupes Windows que l'utilisateur est membre. Assurez-vous d'être using System.Web.Security
.
J'ai utilisé 'var identity = User.Identity comme WindowsIdentity;' – Jaider