27

メソッドで明示的にチェックせずに、Windows 認証済みユーザーが属するロールのリストを取得する方法はありWindowsPrincipal.IsInRoleますか?

4

4 に答える 4

48

WindowsPrincipal.IsInRoleユーザーがその名前のグループのメンバーであるかどうかを確認するだけです。Windowsグループ役割です。プロパティから、ユーザーがメンバーになっているグループのリストを取得できWindowsIdentity.Groupsます。

WindowsIdentityあなたはあなたから得ることができますWindowsPrincipal

WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;

または、WindowsIdentityのファクトリメソッドから取得できます。

WindowsIdentity identity = WindowsIdentity.GetCurrent();

WindowsIdenity.GroupsIdentityReferenceは、グループのSIDを提供するだけのコレクションです。グループ名が必要な場合は、をに変換しIdentityReferenceNTAccount値を取得する必要があります。

var groupNames = from id in identity.Groups
                 select id.Translate(typeof(NTAccount)).Value;
于 2009-04-17T21:39:56.530 に答える
9

編集:ジョシュはそれに私を打ち負かしました!:)

これを試して

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);
            }
        }
    }
}
于 2009-04-17T21:41:53.873 に答える
7

ドメイン サーバーに接続していない場合、Translate関数は次の例外をスローすることがあります。The trust relationship between this workstation and the primary domain failed.

しかし、ほとんどのグループでは問題ないので、次を使用します。

foreach(var s in WindowsIdentity.GetCurrent().Groups) {
    try {
        IdentityReference grp = s.Translate(typeof (NTAccount)); 
        groups.Add(grp.Value);
    }
    catch(Exception) {  }
}
于 2014-05-14T14:17:19.370 に答える