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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top