Share via


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
属性
实现

示例

以下示例要求活动主体是管理员。 参数 namenull,使作为管理员的任何用户都能够传递需求。

注意

在 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

注解

注意

代码访问安全性 (CAS) 已在所有版本的 .NET Framework 和 .NET 中弃用。 如果使用与 CAS 相关的 API,最新版本的 .NET 不会遵循 CAS 注释,并会生成错误。 开发人员应寻求用于完成安全任务的替代方法。

通过将标识信息 (用户名和角色) 传递给构造函数, PrincipalPermission 可用于要求活动主体的标识与此信息匹配。

若要匹配活动 IPrincipal 标识和关联的 IIdentity,指定的标识和角色必须匹配。 如果使用 null 标识字符串,则会将其解释为匹配任何标识的请求。 null使用角色字符串将匹配任何角色。 隐含地,为 nullnamerolePrincipalPermission 传递参数将匹配任何 IPrincipal中的标识和角色。 还可以构造一个 , PrincipalPermission 仅确定 是表示经过身份验证的实体还是 IIdentity 未经身份验证的实体。 在本例中, name 将忽略 和 role

与大多数其他权限不同, PrincipalPermission 不会扩展 CodeAccessPermission。 但是,它确实实现了 IPermission 接口。 这是因为 PrincipalPermission 不是代码访问权限;也就是说,它不是基于执行程序集的标识授予的。 相反,它允许代码DemandUnionIntersect以与代码访问和代码标识权限执行这些操作的方式一致的方式,针对当前用户标识执行) (、、 等操作。

重要

在要求主体权限之前,必须将当前应用程序域的主体策略设置为枚举值 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)
已过时.

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

适用于

另请参阅