Как проверить, является ли данный пользователь членом встроенной группы "Администраторы"?
Мне нужно программно проверить (в.NET), является ли данный пользователь (учетная запись домена) членом встроенной группы "Администраторы" на текущем компьютере (который выполняет приложение).
Является ли это возможным?
4 ответа
Я не знаю о.Net, но в win32 проще всего вызвать IsUserAnAdmin(). Если вам нужно больше контроля, вы можете открыть токен процесса и проверить с CheckTokenMembership для каждой группы, которую вы хотите проверить
Изменить: см. Pinvoke.net для примера кода.NET (спасибо выбрано)
Существует Win32 API для этого вы можете P / Invoke: IsUserAnAdmin
Вопрос более сложен в Vista ... см. Этот пост в блоге.
Если вы говорите о работающем в данный момент пользователе, то
using System.Security.Principal;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(identity);
if (wp.IsInRole("BUILTIN\Administrators"))
// Is Administrator
else
// Is Not
Если нет, то я ожидаю, что можно установить личность для конкретного пользователя, но не изучал, как это сделать.
Вы можете зациклить группы, как я сделал в этом ответе:
Определение членов локальных групп через C#
Прочитав еще немного, проще всего будет использовать System.DirectoryServices.AccountManagement
Пространство имен. Вот как это можно использовать:
http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx
Образец:
public static bool IsUserInGroup(string username, string groupname, ContextType type)
{
PrincipalContext context = new PrincipalContext(type);
UserPrincipal user = UserPrincipal.FindByIdentity(
context,
IdentityType.SamAccountName,
username);
GroupPrincipal group = GroupPrincipal.FindByIdentity(
context, groupname);
return user.IsMemberOf(group);
}