Определить, есть ли пользователь в группе - PullRequest
0 голосов
/ 22 мая 2009

Как определить, является ли произвольный пользователь администратором на компьютере? У меня есть домен пользователя и имя пользователя, но не пароль. Пользователь НЕ является зарегистрированным пользователем, поэтому я не могу просто использовать WindowsIdentity.GetCurrent.

Ответы [ 3 ]

2 голосов
/ 22 мая 2009

Использование UserPrincipal.GetAuthorizationGroups для проверки, входит ли пользователь в группу, которой разрешен административный доступ к компьютеру.

Сначала получите объект UserPrincipal, используя FindByIdentity. Затем получите группы авторизации, членом которых является пользователь. Проверьте каждую группу, чтобы увидеть, соответствует ли встроенная группа администраторов. Если встроенная группа администраторов не входит в группы авторизации пользователя, то пользователь не является администратором на локальном компьютере.

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 голос
/ 22 мая 2009

Использовать LDAP. Смотрите примеры здесь .

0 голосов
/ 22 мая 2009

Вы можете использовать System.DirectoryServices, чтобы сначала загрузить локальный компьютер, а затем выполнить поиск любых пользователей в данной группе. Попробуйте следующий код:

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

Затем создайте новый DirectoryEntry для каждого члена в объекте members:

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

Вы также можете выполнить поиск по объекту members, чтобы найти пользователя и т. Д. Существует множество способов сделать это. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...