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 используется в качестве источника для идентификаторов 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\Administrators 0x220. Использование 0x220 в true качестве входного параметра метода приводит к IsInRole возврату, если текущий субъект является администратором.
В следующих таблицах перечислены значения RID по умолчанию.
| Встроенные пользователи | RID |
|---|---|
| DOMAINNAME\Administrator | 0x1F4 |
| DOMAINNAME\Guest | 0x1F5 |
| Встроенные глобальные группы | RID |
|---|---|
| DOMAINNAME\Domain Admins | 0x200 |
| ИМЯ_ДОМЕНА\Пользователи домена | 0x201 |
| DOMAINNAME\Domain Guest | 0x202 |
| Встроенные локальные группы | RID |
|---|---|
| BUILTIN\Administrators | 0x220 |
| BUILTIN\Users | 0x221 |
| BUILTIN\Guest | 0x222 |
| BUILTIN\Account Operators | 0x224 |
| BUILTIN\Server Operators | 0x225 |
| BUILTIN\Print Operators | 0x226 |
| BUILTIN\Backup Operators | 0x227 |
| BUILTIN\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
Параметры
Объект 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. При тестировании только что созданных сведений о роли, таких как новый пользователь или новая группа, важно выйти из системы и войти в систему, чтобы принудительно распространить сведения о роли в домене. Это может привести к тому, 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.
Возвращаемое значение
Значение 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, для которой требуется проверить членство.
Возвращаемое значение
Значение 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\RoleNameHere. Например, чтобы проверить членство в роли администратора Windows, строка, представляющая роль, должна иметь значение BUILTIN\Administrators. Обратите внимание, что может потребоваться экранировать обратную косую черту. В следующей таблице перечислены встроенные роли.
Примечание
Написание ролей BUILTIN в строковом формате отличается от орфографии, используемой в перечислении WindowsBuiltInRole . Например, правописание администратора в перечислении — "Администратор", а не "Администраторы". При использовании этой перегрузки используйте правописание для роли из следующей таблицы.
| Встроенные локальные группы |
|---|
| BUILTIN\Administrators |
| BUILTIN\Users |
| BUILTIN\Guest |
| BUILTIN\Account Operators |
| BUILTIN\Server Operators |
| BUILTIN\Print Operators |
| BUILTIN\Backup Operators |
| BUILTIN\Replicator |
Для ролей, относящихся к компьютеру role , строка должна быть в формате MachineName\RoleNameHere.
Для ролей, относящихся к домену role , строка должна быть в формате "DomainName\RoleNameHere"; например, "SomeDomain\Domain Users".
Примечание
В .NET Framework версии 1.0 role параметр учитывает регистр. В .NET Framework версии 1.1 и более поздних версиях role параметр не учитывает регистр.