Comment puis-je récupérer tous les rôles (groupes) un utilisateur est membre?
-
11-09-2019 - |
Question
Y at-il un moyen d'obtenir une liste des rôles d'un utilisateur authentifié Windows est en, sans vérifier explicitement par la méthode de WindowsPrincipal.IsInRole
?
La solution
WindowsPrincipal.IsInRole
vérifie seulement si l'utilisateur est un membre du groupe avec ce nom; un groupe Windows est Rôle. Vous pouvez obtenir une liste des groupes qu'un utilisateur est membre de 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;
Autres conseils
EDIT: Josh m'a battu à lui! :)
Essayer 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 Translate
peut jeter le The trust relationship between this workstation and the primary domain failed.
d'exception suivante
Mais pour la plupart des groupes, ce sera OK, donc j'utiliser:
foreach(var s in WindowsIdentity.GetCurrent().Groups) {
try {
IdentityReference grp = s.Translate(typeof (NTAccount));
groups.Add(grp.Value);
}
catch(Exception) { }
}
Dans un site ASP.NET MVC, vous pouvez le faire comme ceci:
Ajoutez ceci à 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 que vous êtes using System.Web.Security
.