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 группы пользователей, в которой необходимо проверить состояние членства участника.

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

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

Примеры

В следующем примере кода показано использование IsInRole методов. Перечисление WindowsBuiltInRole используется в качестве источника для ИДЕНТИФИКАТОРов, которые определяют встроенные роли. Идентификаторы идентификаторов используются для определения ролей текущего субъекта.

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

Комментарии

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

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

Note

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

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

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

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

Встроенные пользователи ИЗБАВЛЯТЬ
DOMAINNAME\Administrator 0x1F4
DOMAINNAME\Guest 0x1F5
Встроенные глобальные группы ИЗБАВЛЯТЬ
ДОМЕНNAME\Администраторы домена 0x200
ДОМЕНNAME\Доменные пользователи 0x201
DOMAINNAME\Domain Guest 0x202
Встроенные локальные группы ИЗБАВЛЯТЬ
BUILTIN\Administrators 0x220
BUILDIN\Users 0x221
BUILDIN\Guest 0x222
Операторы BUILDIN\Account 0x224
Операторы BUILDIN\Server 0x225
Операторы BUILDIN\Print 0x226
Операторы BUILDIN\Backup 0x227
BUILDIN\Replicator 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.

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

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. При тестировании новых сведений о ролевой роли, таких как новый пользователь или новая группа, важно выйти из системы и войти в систему, чтобы принудительно распространить сведения о роли в домене. Это не может привести к возврату IsInRolefalseтеста.

Note

В 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 .

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

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))

Комментарии

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

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

Note

В 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, для которой требуется проверить членство.

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

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"))

Комментарии

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

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

Note

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

Для встроенных ролей role строка должна быть в форме "BUILDIN\RoleNameHere". Например, чтобы проверить членство в роли администратора Windows, строка, представляющая роль, должна быть "BUILDIN\Administrators". Обратите внимание, что обратная косая черта может потребоваться экранировать. В следующей таблице перечислены встроенные роли.

Note

Орфография для ролей BUILTIN в строковом формате отличается от орфографии, используемой WindowsBuiltInRole в перечислении. Например, правописание администратора в перечислении — "Администратор", а не "Администраторы". При использовании этой перегрузки используйте орфографию для роли из следующей таблицы.

Встроенные локальные группы
BUILTIN\Administrators
BUILDIN\Users
BUILDIN\Guest
Операторы BUILDIN\Account
Операторы BUILDIN\Server
Операторы BUILDIN\Print
Операторы BUILDIN\Backup
BUILDIN\Replicator

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

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

Note

В .NET Framework версии 1.0 параметр role учитывает регистр. В .NET Framework версии 1.1 и более поздних версиях параметр role не учитывает регистр.

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

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