PrincipalPermission Класс

Определение

Внимание!

Code Access Security is not supported or honored by the runtime.

Позволяет выполнять проверки по активному субъекту (см. IPrincipal) с помощью конструкций языка, определенных для декларативных и императивных действий по обеспечению безопасности. Этот класс не наследуется.

public ref class PrincipalPermission sealed : System::Security::IPermission, System::Security::Permissions::IUnrestrictedPermission
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Serializable]
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
type PrincipalPermission = class
    interface IPermission
    interface ISecurityEncodable
    interface IUnrestrictedPermission
[<System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type PrincipalPermission = class
    interface IPermission
    interface ISecurityEncodable
    interface IUnrestrictedPermission
[<System.Serializable>]
type PrincipalPermission = class
    interface IPermission
    interface IUnrestrictedPermission
    interface ISecurityEncodable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PrincipalPermission = class
    interface IPermission
    interface IUnrestrictedPermission
    interface ISecurityEncodable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PrincipalPermission = class
    interface IPermission
    interface ISecurityEncodable
    interface IUnrestrictedPermission
Public NotInheritable Class PrincipalPermission
Implements IPermission, IUnrestrictedPermission
Наследование
PrincipalPermission
Атрибуты
Реализации

Примеры

В следующем примере требуется, чтобы активный участник был администратором. Этот name параметр позволяет nullлюбому пользователю, являющемуся администратором, передать запрос.

Примечание

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

using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::Security::Policy;
using namespace System::Security::Principal;

int main(array<System::String ^> ^args)
{
    System::String^ null;
    AppDomain::CurrentDomain->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);
    PrincipalPermission^ principalPerm = gcnew PrincipalPermission(null, "Administrators" );
      principalPerm->Demand();
      Console::WriteLine("Demand succeeded");
    return 0;
}
using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;

class SecurityPrincipalDemo
{

    public static void Main()
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
        principalPerm.Demand();
        Console.WriteLine("Demand succeeded.");
    }
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal



Class SecurityPrincipalDemo


    Public Shared Sub Main()
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
        Dim principalPerm As New PrincipalPermission(Nothing, "Administrators")
        principalPerm.Demand()
        Console.WriteLine("Demand succeeded.")

    End Sub
End Class

Комментарии

Передав сведения об удостоверении (имя пользователя и роль) конструктору, можно использовать для того, PrincipalPermission чтобы требовать, чтобы удостоверение активного участника соответствовало этой информации.

Чтобы соответствовать активному IPrincipal и связанному IIdentity, необходимо совпадать как с указанным удостоверением, так и с ролью. Если null используется строка удостоверения, она интерпретируется как запрос на соответствие любому удостоверению. Использование строки роли будет соответствовать любой null роли. По сути, передача null параметра для name или role для PrincipalPermission сопоставления удостоверений и ролей в любом IPrincipal. Также можно создать объект PrincipalPermission , который определяет, представляет ли IIdentity сущность, прошедший проверку подлинности или не прошедший проверку подлинности. В этом случае name и role игнорируются.

В отличие от большинства других разрешений, PrincipalPermission не расширяется CodeAccessPermission. Однако он реализует IPermission интерфейс. Это связано с тем, что PrincipalPermission это не разрешение на доступ к коду, то есть оно не предоставляется на основе удостоверения выполняемой сборки. Вместо этого он позволяет коду выполнять действия (Demand, UnionIntersectи т. д.) с текущим удостоверением пользователя в соответствии с способом выполнения этих действий для доступа к коду и разрешений удостоверения кода.

Важно!

Перед требованием разрешения субъекта необходимо задать для текущей политики домена приложения значение WindowsPrincipalперечисления. По умолчанию для основной политики задано значение UnauthenticatedPrincipal. Если политика субъекта не задана, запрос на разрешение субъекта WindowsPrincipalзавершится ошибкой. Перед требованием к основному разрешению необходимо выполнить следующий код:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).

Конструкторы

PrincipalPermission(PermissionState)

Инициализирует новый экземпляр класса PrincipalPermission указанным значением PermissionState.

PrincipalPermission(String, String)

Инициализирует новый экземпляр класса PrincipalPermission для указанных объектов name и role.

PrincipalPermission(String, String, Boolean)

Инициализирует новый экземпляр класса PrincipalPermission для указанных объектов name, role и состояния проверки подлинности.

Методы

Copy()

Создает и возвращает идентичную копию текущего разрешения.

Demand()

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

Equals(Object)

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

Equals(Object)

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

(Унаследовано от Object)
FromXml(SecurityElement)

Восстанавливает разрешение с указанным состоянием из кодировки XML.

GetHashCode()

Возвращает хэш-код для объекта PrincipalPermission, который можно использовать в алгоритмах хэширования и структурах данных, например в хэш-таблице.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
Intersect(IPermission)

Создает и возвращает разрешение, представляющее собой пересечение текущего и указанного разрешений.

IsSubsetOf(IPermission)

Определяет, является ли текущее разрешение подмножеством указанного разрешения.

IsUnrestricted()

Возвращает значение, указывающее, является ли текущее разрешение неограниченным.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Создает и возвращает строку, представляющую текущее разрешение.

ToXml()

Создает кодировку XML для разрешения и его текущего состояния.

Union(IPermission)

Создает разрешение, представляющее собой объединение текущего и указанного разрешений.

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

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