Поделиться через


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
[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
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}")>]
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
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

Комментарии

Внимание!

Безопасность доступа к коду (CAS) является устаревшей во всех версиях платформа .NET Framework и .NET. В последних версиях .NET заметки CAS не учитываются и при использовании API, связанных с CAS, возникают ошибки. Разработчикам следует искать альтернативные способы выполнения задач безопасности.

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

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

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

Важно!

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

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

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

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