メソッドで明示的にチェックせずに、Windows 認証済みユーザーが属するロールのリストを取得する方法はありWindowsPrincipal.IsInRole
ますか?
質問する
24535 次
4 に答える
48
WindowsPrincipal.IsInRole
ユーザーがその名前のグループのメンバーであるかどうかを確認するだけです。Windowsグループは役割です。プロパティから、ユーザーがメンバーになっているグループのリストを取得できWindowsIdentity.Groups
ます。
WindowsIdentity
あなたはあなたから得ることができますWindowsPrincipal
:
WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;
または、WindowsIdentityのファクトリメソッドから取得できます。
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsIdenity.Groups
IdentityReference
は、グループのSIDを提供するだけのコレクションです。グループ名が必要な場合は、をに変換しIdentityReference
てNTAccount
値を取得する必要があります。
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 に答える