2012-06-28 3 views
0

Я хочу сделать функцию, чтобы определить, является ли пользователь, чей идентификатор передан с параметром, является администратором. Я могу сделать это для текущего пользователя с -Посмотрите, является ли пользователь администратором Windows 7?

 public static bool IsAuthorizedUser() 
    { 

     WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
     WindowsPrincipal principal = new WindowsPrincipal(identity); 
     return principal.IsInRole(WindowsBuiltInRole.Administrator); 
    } 

, но я хочу, чтобы проверить любой пользователь прошел в Таким образом, подпись изменится на

public static bool IsAuthorizedUser(string username_to_check) 

Как я могу это сделать.? Любая помощь приветствуется.

+0

Вы, видимо, нужно знать пароль пользователя в вопросе, посмотрите на это: http://blogs.msdn.com/b/saurabhkv/archive/2008/05/29/windowsidentity-impersonation -using-c-code.aspx –

+0

и этот тоже http://msdn.microsoft.com/en-us/library/w070t6ka.aspx –

+0

Есть ли способ обойти это? Это то, что я хочу. Я просто хочу проверить, является ли пользователь администратором. Я не понимаю, почему я должен был бы узнать их пароль для этого. – Sterling

ответ

1

Я был в состоянии заставить его работать, как я хотел с UserPrincipal. Спасибо за все отзывы.

public static bool IsAuthorizedUser(string userId) 
{ 
    PrincipalContext ctx = new PrincipalContext(ContextType.Machine); 
    UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userId); 

    bool result = false; 
    if(usr == null) 
    { 
     Console.WriteLine("usr is null"); 
    } 
    else 
    { 
     foreach (Principal p in usr.GetAuthorizationGroups()) 
     { 
      if (p.ToString() == "Administrators") 
      { 
       result = true; 
      } 
     } 
     } 
     return result; 
    } 
0

Казалось бы, вам нужно заглянуть в объявление WindowsIdentity, чтобы узнать, есть ли методы для получения идентификатора пользователя из его имени строки.

+0

Для этого есть конструктор. Он вернет true для моего имени пользователя, но всякий раз, когда я создаю нового пользователя в администраторах и запускаю код, он всегда вылетает с сообщением «Связанная учетная запись в настоящее время заблокирована и может не войти в систему». – Sterling

+0

@Sterling Я думаю, вам нужно использовать пароль данного пользователя. –

+0

normaly, после того, как пользователь аутентифицирован, мы присваиваем роли идентификатору, и мы присоединяемся к CurrentThread приложения –

0

вы можете попробовать с этим кодом

if(principal.Identity.IsAuthenticated) 
{ 
    //Passed 
} 
+0

Это, вероятно, вернет 'true' для каждого пользователя, который вошел в систему, правильно? – Joey

+0

именно в этом случае, с разницей между аутентификацией и авторизацией, я думаю, что Sterling хочет подтвердить аутентификацию в этих сервисах. –

+0

Я думаю, что OP хотел бы узнать, был ли конкретный пользователь, не обязательно зарегистрированный пользователь, членом Группа администраторов. –

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