PrincipalPermission 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
注意
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.IUnrestrictedPermissionpublic 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 IUnrestrictedPermissiontype PrincipalPermission = class
    interface IPermission
    interface ISecurityEncodable
    interface IUnrestrictedPermissionPublic 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 的所有版本中弃用。 使用与 CAS 相关的 API 时,最新版本的 .NET 不遵循 CAS 注释并生成错误。 开发人员应寻求完成安全任务的替代方法。
通过将标识信息(用户名和角色)传递给构造函数,可以使用 PrincipalPermission 来要求活动主体的标识与此信息匹配。
若要匹配活动 IPrincipal 和关联的 IIdentity,指定的标识和角色必须匹配。 如果使用 null 标识字符串,则会将其解释为与任何标识匹配的请求。 使用 null 角色字符串将匹配任何角色。 这意味着,将 name 或 role 的 null 参数传递给 PrincipalPermission 将匹配任何 IPrincipal中的标识和角色。 还可以构造一个 PrincipalPermission,该 PrincipalPermission 仅确定 IIdentity 是表示经过身份验证的还是未经身份验证的实体。 在这种情况下,将忽略 name 和 role。
与大多数其他权限不同,PrincipalPermission 不会扩展 CodeAccessPermission。 但是,它实现 IPermission 接口。 这是因为 PrincipalPermission 不是代码访问权限;也就是说,不会根据正在执行的程序集的标识授予它。 相反,它允许代码针对当前用户标识执行操作(Demand、Union、Intersect等),其方式与代码访问和代码标识权限执行这些操作的方式一致。
重要
在对主体权限的要求之前,必须将当前应用程序域的主体策略设置为枚举值 WindowsPrincipal。 默认情况下,主体策略设置为 UnauthenticatedPrincipal。 如果未将主体策略设置为 WindowsPrincipal,则对主体权限的需求将失败。 在需要主体权限之前,应执行以下代码:
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).
构造函数
| PrincipalPermission(PermissionState) | 
				已过时.
			 使用指定的 PermissionState初始化 PrincipalPermission 类的新实例。 | 
| PrincipalPermission(String, String, Boolean) | 
				已过时.
			 为指定的  | 
| PrincipalPermission(String, String) | 
				已过时.
			 为指定的  | 
方法
| 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) | 
				已过时.
			 创建一个权限,该权限是当前权限和指定权限的并集。 |