2009-04-17 10 views

Répondre

27

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; 
+1

J'ai utilisé 'var identity = User.Identity comme WindowsIdentity;' – Jaider

7

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); 
      } 
     } 
    } 
} 
5

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) { } 
} 
+0

Ceci est LA réponse. –

0

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.

Questions connexes