检测用户是否在组中

时间:2009-05-22 18:29:55

标签: c# .net vb.net

如何检测任意用户是否是计算机的管理员?我有用户的域名和用户名,但没有密码。用户不是当前登录的用户,因此我不能只使用WindowsIdentity.GetCurrent。

3 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:1)

使用LDAP。请参阅示例here

答案 2 :(得分:0)

您可以使用System.DirectoryServices首先加载本地计算机,然后搜索给定组中的任何用户。试试下面的代码:

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

然后为members对象中的每个成员创建一个新的DirectoryEntry:

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

该foreach循环内的成员对象有一大堆关于其中用户的数据。将您的会员姓名与循环中的当前名称进行比较:

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

您还可以搜索成员对象以查找用户等。有很多方法可以做到这一点。希望这有帮助!