2009-05-22 22 views
0

任意のユーザーがマシン上の管理者であるかどうかを検出するにはどうすればよいですか?私はユーザーのドメインとユーザー名を持っていますが、パスワードは持っていません。ユーザーは現在ログインしているユーザーではないため、WindowsIdentity.GetCurrentだけを使用することはできません。ユーザーがグループに属しているかどうかを検出する

答えて

1

LDAPを使用します。例hereを参照してください。

+0

完璧、ありがとう。 –

0

System.DirectoryServicesを使用して、ローカルマシンを最初にロードしてから、特定のグループ内のユーザーを検索できます。次のコードを試してみてください:

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName); 
DirectoryEntry admGroup = localMachine.Children.Find("administrators","group"); 
object members = admGroup.Invoke("members", null); 

、オブジェクトのメンバーに各メンバーのための新しいDirectoryEntryをを作成します。

foreach (object groupMember in (IEnumerable)members) 
{ 
    DirectoryEntry member = new DirectoryEntry(groupMember); 
    //Do what you want 
} 

そのforeachループの内側部材のオブジェクトは、ユーザーに関するデータの負荷を持っていますその中。ループ内の現在の1を使用してメンバーの名前を比較します

if (memberSearch.name == member.name) { 
    return true; 
} else { 
    return false; 
} 

あなたはまた、部材を介して検索することができ、ユーザーになどを見つけるために、オブジェクトにそれを行う方法の多くがあります。お役に立てれば!

2

UserPrincipal.GetAuthorizationGroupsを使用して、ユーザーがマシンへの管理アクセスを許可されているグループにいるかどうかを確認します。

まず、FindByIdentityを使用してUserPrincipalオブジェクトを取得します。次に、ユーザーが所属する権限グループを取得します。各グループをチェックして、組み込み管理者グループと一致するかどうかを確認します。組み込み管理者グループがユーザーの権限グループに属していない場合、ユーザーはローカル・マシンの管理者ではありません。

using System.DirectoryServices.AccountManagement; 
using System.Linq; 

var name = Environment.UserName; 
var user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), name); 
var groups = user.GetAuthorizationGroups(); 
var isAdmin = groups.Any(g => g.Name == "Administrators");  
Console.WriteLine("Admin: " + isAdmin); 
関連する問題