2008-09-09 6 views
2

Мне нужно проверить программным способом (в .NET), является ли данный пользователь (учетная запись домена) членом встроенной группы «Администраторы» на текущем компьютере (тот, где приложение выполняется).Как проверить, является ли данный пользователь членом встроенной группы «Администраторы»?

Возможно ли это?

ответ

2

Я не знаю о .Net, но в win32, легкий способ вызвать IsUserAnAdmin(). Если вам нужно больше контроля, вы можете открыть процесс маркер и проверить с CheckTokenMembership для каждой группы, которую необходимо проверить

Edit: См pinvoke.net для .NET образца кода (спасибо chopeen)

1

Вы можете цикл группы, как я сделал в этом ответе:

Determining members of local groups via 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); 
} 
+0

Пространство имен System.DirectoryServices.AccountManagement является новым для .NET 3.5, не так ли? – 2008-09-10 09:04:21

+0

Первое предложение в связанной статье: «Просмотрев некоторые из новых материалов 3.5, я наткнулся на новую сборку под названием« System.DirectoryServices.AccountManagement »- это привлекло мое внимание». – Espo 2008-09-11 05:36:10

2

Существует Win32- API для этого вы могли бы P/Invoke: IsUserAnAdmin

Вопрос более сложный на Vista ... см. Это blog post.

0

Если говорить о запущенной в данный момент пользователь затем

using System.Security.Principal; 

WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
WindowsPrincipal wp = new WindowsPrincipal(identity); 

if (wp.IsInRole("BUILTIN\Administrators")) 
    // Is Administrator 
else 
    // Is Not 

Если нет, то я ожидаю его можно установить идентичность для конкретного пользователя, но не посмотрели, как.

Смежные вопросы