WindowsPrincipal.IsInRole Метод

Определение

Определяет, относится ли текущий участник к заданной группе пользователей Windows.

Перегрузки

IsInRole(Int32)

Определяет, относится ли текущий участник к группе пользователей Windows с заданным относительным идентификатором (RID).

IsInRole(SecurityIdentifier)

Определяет, относится ли текущий субъект к группе пользователей Windows с заданным идентификатором безопасности (SID).

IsInRole(WindowsBuiltInRole)

Определяет, относится ли текущий субъект к группе пользователей Windows с заданным WindowsBuiltInRole.

IsInRole(String)

Определяет, относится ли текущий субъект к группе пользователей Windows с заданным именем.

Комментарии

Для этого метода существует четыре перегрузки. По соображениям производительности IsInRole(SecurityIdentifier) настоятельно рекомендуется использовать перегрузку.

IsInRole(Int32)

Определяет, относится ли текущий участник к группе пользователей Windows с заданным относительным идентификатором (RID).

public:
 virtual bool IsInRole(int rid);
public virtual bool IsInRole (int rid);
override this.IsInRole : int -> bool
abstract member IsInRole : int -> bool
override this.IsInRole : int -> bool
Public Overridable Function IsInRole (rid As Integer) As Boolean

Параметры

rid
Int32

RID группы пользователей Windows, в которой требуется проверить состояние членства участника.

Возвращаемое значение

Boolean

Значение true, если текущий субъект является членом заданной группы пользователей Windows (в конкретной роли); в противном случае — значение false.

Примеры

В следующем примере кода показано использование IsInRole методов. WindowsBuiltInRoleПеречисление используется в качестве источника идентификаторов RID, которые обозначают встроенные роли. Идентификаторы RID используются для определения ролей текущего участника.

public:
   static void DemonstrateWindowsBuiltInRoleEnum()
   {
      AppDomain^ myDomain = Thread::GetDomain();

      myDomain->SetPrincipalPolicy( PrincipalPolicy::WindowsPrincipal );
      WindowsPrincipal^ myPrincipal = dynamic_cast<WindowsPrincipal^>(Thread::CurrentPrincipal);

      Console::WriteLine( "{0} belongs to: ", myPrincipal->Identity->Name );

      Array^ wbirFields = Enum::GetValues( WindowsBuiltInRole::typeid );

      for each ( Object^ roleName in wbirFields )
      {
         try
         {
            Console::WriteLine( "{0}? {1}.", roleName,
               myPrincipal->IsInRole(  *dynamic_cast<WindowsBuiltInRole^>(roleName) ) );
         }
         catch ( Exception^ ) 
         {
            Console::WriteLine( "{0}: Could not obtain role for this RID.",
               roleName );
         }
      }
   }
using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;

class SecurityPrincipalDemo
{
    public static void DemonstrateWindowsBuiltInRoleEnum()
    {
        AppDomain myDomain = Thread.GetDomain();

        myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        WindowsPrincipal myPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
        Console.WriteLine("{0} belongs to: ", myPrincipal.Identity.Name.ToString());
        Array wbirFields = Enum.GetValues(typeof(WindowsBuiltInRole));
        foreach (object roleName in wbirFields)
        {
            try
            {
                // Cast the role name to a RID represented by the WindowsBuildInRole value.
                Console.WriteLine("{0}? {1}.", roleName,
                    myPrincipal.IsInRole((WindowsBuiltInRole)roleName));
                Console.WriteLine("The RID for this role is: " + ((int)roleName).ToString());
            }
            catch (Exception)
            {
                Console.WriteLine("{0}: Could not obtain role for this RID.",
                    roleName);
            }
        }
        // Get the role using the string value of the role.
        Console.WriteLine("{0}? {1}.", "Administrators",
            myPrincipal.IsInRole("BUILTIN\\" + "Administrators"));
        Console.WriteLine("{0}? {1}.", "Users",
            myPrincipal.IsInRole("BUILTIN\\" + "Users"));
        // Get the role using the WindowsBuiltInRole enumeration value.
        Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator,
           myPrincipal.IsInRole(WindowsBuiltInRole.Administrator));
        // Get the role using the WellKnownSidType.
        SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
        Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid));
    }

    public static void Main()
    {
        DemonstrateWindowsBuiltInRoleEnum();
    }
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal

Class SecurityPrincipalDemo

    Public Shared Sub DemonstrateWindowsBuiltInRoleEnum()
        Dim myDomain As AppDomain = Thread.GetDomain()

        myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
        Dim myPrincipal As WindowsPrincipal = CType(Thread.CurrentPrincipal, WindowsPrincipal)
        Console.WriteLine("{0} belongs to: ", myPrincipal.Identity.Name.ToString())
        Dim wbirFields As Array = [Enum].GetValues(GetType(WindowsBuiltInRole))
        Dim roleName As Object
        For Each roleName In wbirFields
            Try
                ' Cast the role name to a RID represented by the WindowsBuildInRole value.
                Console.WriteLine("{0}? {1}.", roleName, myPrincipal.IsInRole(CType(roleName, WindowsBuiltInRole)))
                Console.WriteLine("The RID for this role is: " + Fix(roleName).ToString())

            Catch
                Console.WriteLine("{0}: Could not obtain role for this RID.", roleName)
            End Try
        Next roleName
        ' Get the role using the string value of the role.
        Console.WriteLine("{0}? {1}.", "Administrators", myPrincipal.IsInRole("BUILTIN\" + "Administrators"))
        Console.WriteLine("{0}? {1}.", "Users", myPrincipal.IsInRole("BUILTIN\" + "Users"))
        ' Get the role using the WindowsBuiltInRole enumeration value.
        Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator, myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
        ' Get the role using the WellKnownSidType.
        Dim sid As New SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing)
        Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid))

    End Sub

    Public Shared Sub Main()
        DemonstrateWindowsBuiltInRoleEnum()

    End Sub
End Class

Комментарии

При тестировании новых сведений о ролях, таких как новый пользователь или новая группа, важно выйти и войти в систему, чтобы принудительно распространить сведения о ролях в домене. Это может привести к IsInRole возврату теста false .

Для повышения производительности IsInRole(SecurityIdentifier) перегрузку рекомендуется использовать в качестве предпочтительной перегрузки для определения роли пользователя.

Примечание

В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, для которой требуются права администратора, вы можете динамически повысить уровень роли с помощью диалогового окна "согласие". Код, выполняющий метод, IsInRole не отображает диалоговое окно согласие. Код возвращает значение false, если используется стандартная роль пользователя, даже если вы используете встроенную группу "Администраторы". Вы можете повысить уровень привилегий перед выполнением кода, щелкнув правой кнопкой мыши значок приложения и указав, что вы хотите запустить от имени администратора.

относительные идентификаторы (rid) являются компонентами идентификатора безопасности (SID) Windows группы пользователей и поддерживаются для предотвращения проблем локализации между различными платформами. Многие учетные записи пользователей, локальные группы и глобальные группы имеют значение RID по умолчанию, которое является константой во всех версиях Windows.

Например, RID для роли Builtin \ администраторы — 0x220. Использование 0x220 в качестве входного параметра для IsInRole метода приводит к true возвращению, если текущий участник является администратором.

В следующих таблицах перечислены значения RID по умолчанию.

Встроенные пользователи RID
домаиннаме\администратор 0x1F4
домаиннаме\гуест 0x1F5
Встроенные глобальные группы RID
Администраторы Домаиннаме\домаин 0x200
Пользователи Домаиннаме\домаин 0x201
Домаиннаме\домаин гости 0x202
Встроенные локальные группы RID
BUILTIN\Administrators 0x220
BUILTIN\Users 0x221
буилтин\гуестс 0x222
Операторы Буилтин\аккаунт 0x224
Операторы Буилтин\сервер 0x225
Операторы Буилтин\принт 0x226
Операторы Буилтин\баккуп 0x227
буилтин\репликатор 0x228

Применяется к

IsInRole(SecurityIdentifier)

Определяет, относится ли текущий субъект к группе пользователей Windows с заданным идентификатором безопасности (SID).

public:
 virtual bool IsInRole(System::Security::Principal::SecurityIdentifier ^ sid);
public virtual bool IsInRole (System.Security.Principal.SecurityIdentifier sid);
[System.Runtime.InteropServices.ComVisible(false)]
public virtual bool IsInRole (System.Security.Principal.SecurityIdentifier sid);
override this.IsInRole : System.Security.Principal.SecurityIdentifier -> bool
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member IsInRole : System.Security.Principal.SecurityIdentifier -> bool
override this.IsInRole : System.Security.Principal.SecurityIdentifier -> bool
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.IsInRole : System.Security.Principal.SecurityIdentifier -> bool
Public Overridable Function IsInRole (sid As SecurityIdentifier) As Boolean

Параметры

sid
SecurityIdentifier

Объект SecurityIdentifier, уникально определяющий группу пользователей Windows.

Возвращаемое значение

Boolean

Значение true, если текущий участник является членом заданной группы пользователей Windows; в противном случае — значение false.

Атрибуты

Исключения

sid имеет значение null.

Система Windows возвратила код ошибки Win32.

Примеры

В следующем примере кода показано использование WindowsPrincipal.IsInRole(SecurityIdentifier) метода. BuiltinAdministratorsSidЗначение перечисления используется для определения того, является ли текущий участник администратором. Полный пример кода см. в описании WindowsPrincipal.IsInRole(Int32) метода.

// Get the role using the WellKnownSidType.
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid));
    ' Get the role using the WellKnownSidType.
    Dim sid As New SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing)
    Console.WriteLine("WellKnownSidType BuiltinAdministratorsSid  {0}? {1}.", sid.Value, myPrincipal.IsInRole(sid))

End Sub

Комментарии

SecurityIdentifierУникальный идентификатор пользователя или группы на Windows. При тестировании новых сведений о ролях, таких как новый пользователь или новая группа, важно выйти и войти в систему, чтобы принудительно распространить сведения о ролях в домене. Это может привести к IsInRole возврату теста false .

Примечание

В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, для которой требуются права администратора, вы можете динамически повысить уровень роли с помощью диалогового окна "согласие". Код, выполняющий метод, IsInRole не отображает диалоговое окно согласие. Код возвращает значение false, если используется стандартная роль пользователя, даже если вы используете встроенную группу "Администраторы". Вы можете повысить уровень привилегий перед выполнением кода, щелкнув правой кнопкой мыши значок приложения и указав, что вы хотите запустить от имени администратора.

По соображениям производительности это предпочтительная перегрузка для определения роли пользователя.

Применяется к

IsInRole(WindowsBuiltInRole)

Определяет, относится ли текущий субъект к группе пользователей Windows с заданным WindowsBuiltInRole.

public:
 virtual bool IsInRole(System::Security::Principal::WindowsBuiltInRole role);
public virtual bool IsInRole (System.Security.Principal.WindowsBuiltInRole role);
override this.IsInRole : System.Security.Principal.WindowsBuiltInRole -> bool
abstract member IsInRole : System.Security.Principal.WindowsBuiltInRole -> bool
override this.IsInRole : System.Security.Principal.WindowsBuiltInRole -> bool
Public Overridable Function IsInRole (role As WindowsBuiltInRole) As Boolean

Параметры

role
WindowsBuiltInRole

Одно из значений перечисления WindowsBuiltInRole.

Возвращаемое значение

Boolean

Значение true, если текущий участник является членом заданной группы пользователей Windows; в противном случае — значение false.

Исключения

role не является допустимым значением WindowsBuiltInRole.

Примеры

В следующем примере используется WindowsBuiltInRole перечисление для определения того, является ли текущий участник экземпляром Administrator . Полный пример кода см. в описании WindowsPrincipal.IsInRole(Int32) метода.

// Get the role using the WindowsBuiltInRole enumeration value.
Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator,
   myPrincipal.IsInRole(WindowsBuiltInRole.Administrator));
' Get the role using the WindowsBuiltInRole enumeration value.
Console.WriteLine("{0}? {1}.", WindowsBuiltInRole.Administrator, myPrincipal.IsInRole(WindowsBuiltInRole.Administrator))

Комментарии

При тестировании новых сведений о ролях, таких как новый пользователь или новая группа, важно выйти и войти в систему, чтобы принудительно распространить сведения о ролях в домене. Это может привести к IsInRole возврату теста false .

Для повышения производительности IsInRole(SecurityIdentifier) перегрузку рекомендуется использовать в качестве предпочтительной перегрузки для определения роли пользователя.

Примечание

В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, для которой требуются права администратора, вы можете динамически повысить уровень роли с помощью диалогового окна "согласие". Код, выполняющий метод, IsInRole не отображает диалоговое окно согласие. Код возвращает значение false, если используется стандартная роль пользователя, даже если вы используете встроенную группу "Администраторы". Вы можете повысить уровень привилегий перед выполнением кода, щелкнув правой кнопкой мыши значок приложения и указав, что вы хотите запустить от имени администратора.

Применяется к

IsInRole(String)

Определяет, относится ли текущий субъект к группе пользователей Windows с заданным именем.

public:
 override bool IsInRole(System::String ^ role);
public:
 virtual bool IsInRole(System::String ^ role);
public override bool IsInRole (string role);
public virtual bool IsInRole (string role);
override this.IsInRole : string -> bool
abstract member IsInRole : string -> bool
override this.IsInRole : string -> bool
Public Overrides Function IsInRole (role As String) As Boolean
Public Overridable Function IsInRole (role As String) As Boolean

Параметры

role
String

Имя группы пользователей Windows, для которой требуется проверить членство.

Возвращаемое значение

Boolean

Значение true, если текущий участник является членом заданной группы пользователей Windows; в противном случае — значение false.

Реализации

Примеры

В следующем примере кода показано использование WindowsPrincipal.IsInRole(String) метода.

Строки BUILTIN\Administrators и BUILTIN\Users используются для определения того, является ли текущий участник администратором или пользователем. Полный пример кода см. в описании WindowsPrincipal.IsInRole(Int32) метода.

// Get the role using the string value of the role.
Console.WriteLine("{0}? {1}.", "Administrators",
    myPrincipal.IsInRole("BUILTIN\\" + "Administrators"));
Console.WriteLine("{0}? {1}.", "Users",
    myPrincipal.IsInRole("BUILTIN\\" + "Users"));
' Get the role using the string value of the role.
Console.WriteLine("{0}? {1}.", "Administrators", myPrincipal.IsInRole("BUILTIN\" + "Administrators"))
Console.WriteLine("{0}? {1}.", "Users", myPrincipal.IsInRole("BUILTIN\" + "Users"))

Комментарии

При тестировании новых сведений о ролях, таких как новый пользователь или новая группа, важно выйти и войти в систему, чтобы принудительно распространить сведения о ролях в домене. Это может привести к IsInRole возврату теста false .

Для повышения производительности IsInRole(SecurityIdentifier) перегрузку рекомендуется использовать в качестве предпочтительной перегрузки для определения роли пользователя.

Примечание

В Windows Vista привилегии пользователя определяются контролем учетных записей (UAC). Члену встроенной группы "Администраторы" присваивается два маркера доступа на время выполнения: маркер доступа обычного пользователя и маркер доступа администратора. По умолчанию назначена роль обычного пользователя. При попытке выполнить задачу, для которой требуются права администратора, вы можете динамически повысить уровень роли с помощью диалогового окна "согласие". Код, выполняющий метод, IsInRole не отображает диалоговое окно согласие. Код возвращает значение false, если используется стандартная роль пользователя, даже если вы используете встроенную группу "Администраторы". Вы можете повысить уровень привилегий перед выполнением кода, щелкнув правой кнопкой мыши значок приложения и указав, что вы хотите запустить от имени администратора.

Для встроенных ролей role строка должна иметь вид "Builtin \ роленамехере". например, чтобы проверить членство в роли администратора Windows, строка, представляющая роль, должна быть "builtin \ администраторы". Обратите внимание, что обратная косая черта может потребоваться в escape-последовательности. В следующей таблице перечислены встроенные роли.

Примечание

Орфография ВСТРОЕНных ролей в строковом формате отличается от проверки орфографии, используемой в WindowsBuiltInRole перечислении. Например, написание имени администратора в перечислении — «Administrator», а не «Administrators». При использовании этой перегрузки следует использовать проверку орфографии для роли из следующей таблицы.

Встроенные локальные группы
BUILTIN\Administrators
BUILTIN\Users
буилтин\гуестс
Операторы Буилтин\аккаунт
Операторы Буилтин\сервер
Операторы Буилтин\принт
Операторы Буилтин\баккуп
буилтин\репликатор

Для ролей, зависящих от компьютера, role строка должна иметь формат "MachineName \ роленамехере".

Для ролей, относящихся к домену, role строка должна иметь формат "имя_домена \ роленамехере", например "SomeDomain\Domain Users ".

Примечание

в платформа .NET Framework версии 1,0 role параметр учитывает регистр. в платформа .NET Framework версии 1,1 и более поздних role параметр не учитывает регистр.

См. также раздел

Применяется к