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) 决定用户的特权。 如果您是内置的 Administrators 组的成员,将为您分配两个运行时访问令牌:一个标准用户访问令牌和一个管理员访问令牌。 默认情况下,您拥有标准用户角色。 要执行需要管理员身份的代码,必须首先将你的特权从标准用户提升至管理员。 你可以通过以下方式执行此操作:右键单击应用程序图标并指示需以管理员身份运行。

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 与当前用户标识) (、、等方式执行操作,其方式 Union 与对 Intersect 代码访问和代码标识权限执行这些操作的方式一致。

重要

在要求主体权限之前,需要将当前应用程序域的主体策略设置为枚举值 WindowsPrincipal 。 默认情况下,主体策略设置为 UnauthenticatedPrincipal 。 如果不将主体策略设置为,则对 WindowsPrincipal 主体权限的要求会失败。 在要求主体权限之前,应执行以下代码:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).

构造函数

PrincipalPermission(PermissionState)

使用指定的 PrincipalPermission 初始化 PermissionState 类的新实例。

PrincipalPermission(String, String)

为指定的 namerole 初始化 PrincipalPermission 类的新实例。

PrincipalPermission(String, String, Boolean)

为指定的 namerole 和身份验证状态初始化 PrincipalPermission 类的新实例。

方法

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)

创建一个权限,该权限是当前权限与指定权限的并集。

适用于

另请参阅