2009-05-22 3 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 
} 

Объект члена внутри этого Еогеасп петли имеет нагрузку данных о пользователе внутри него. Сравните имя вашего члена с текущим в цикле:

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

Вы можете также искать через элементы объекта, чтобы найти пользователя и т.д. Есть много способов сделать это. Надеюсь это поможет!

2

Использование 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);