Share via


PrincipalPermission 类

允许使用为声明和强制安全性操作定义的语言结构来检查活动用户(请参见 IPrincipal)。无法继承此类。

**命名空间:**System.Security.Permissions
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class PrincipalPermission
    Implements IPermission, IUnrestrictedPermission, ISecurityEncodable
用法
Dim instance As PrincipalPermission
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public sealed class PrincipalPermission : IPermission, IUnrestrictedPermission, ISecurityEncodable
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class PrincipalPermission sealed : IPermission, IUnrestrictedPermission, ISecurityEncodable
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class PrincipalPermission implements IPermission, IUnrestrictedPermission, 
    ISecurityEncodable
SerializableAttribute 
ComVisibleAttribute(true) 
public final class PrincipalPermission implements IPermission, IUnrestrictedPermission, 
    ISecurityEncodable

备注

通过将标识信息(用户名和角色)传递到构造函数,可以使用 PrincipalPermission 来请求活动用户的标识与此信息匹配。

若要与活动 IPrincipal 和关联的 IIdentity 匹配,则所指定的标识和角色均必须匹配。如果使用了 空引用(在 Visual Basic 中为 Nothing) 标识字符串,则它将被解释为匹配任何标志的请求。使用 空引用(在 Visual Basic 中为 Nothing) 角色字符串将匹配任何角色。根据暗含,将 name 或 role 的 空引用(在 Visual Basic 中为 Nothing) 参数传递到 PrincipalPermission,将匹配任何 IPrincipal 中的标识和角色。还可构造 PrincipalPermission,它只确定 IIdentity 所表示的是已验证身份的实体还是未经身份验证的实体。在此情况下,name 和 role 将被忽略。

与多数其他权限不同,PrincipalPermission 不扩展 CodeAccessPermission。但是,它实现 IPermission 接口。这是由于 PrincipalPermission 不是代码访问权限;即,它不是基于执行程序集的标识而授予的。相反,它允许代码对当前用户标识执行操作(DemandUnionIntersect 等),其方式与对代码访问和代码标识权限执行这些操作时的方式一致。

Note重要事项:

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

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).

示例

下面的代码示例创建两个表示两个不同管理用户的 PrincipalPermission 对象,形成二者的并集并进行请求。仅当 IPrincipal 的活动实现表示属于 Manager 角色的用户 Bob 或 Supervisor 角色的用户 Louise 时,Demand 才能成功。

Dim id1 As String = "Bob"
Dim role1 As String = "Manager"
Dim PrincipalPerm1 As New PrincipalPermission(id1, role1)
       
Dim id2 As String = "Louise"
Dim role2 As String = "Supervisor"
Dim PrincipalPerm2 As New PrincipalPermission(id2, role2)
       
PrincipalPerm1.Union(PrincipalPerm2).Demand()
String id1 = "Bob";
String role1 = "Manager";
PrincipalPermission PrincipalPerm1 = new PrincipalPermission(id1, role1);

String id2 = "Louise";
String role2 = "Supervisor";
PrincipalPermission PrincipalPerm2 = new PrincipalPermission(id2, role2);

(PrincipalPerm1.Union(PrincipalPerm2)).Demand();
String^ id1 = "Bob";
String^ role1 = "Manager";
PrincipalPermission^ PrincipalPerm1 = gcnew PrincipalPermission( id1,role1 );

String^ id2 = "Louise";
String^ role2 = "Supervisor";
PrincipalPermission^ PrincipalPerm2 = gcnew PrincipalPermission( id2,role2 );

(PrincipalPerm1->Union( PrincipalPerm2 ))->Demand();
String id1 = "Bob";
String role1 = "Manager";
PrincipalPermission principalPerm1 = new PrincipalPermission(id1,
    role1);
String id2 = "Louise";
String role2 = "Supervisor";
PrincipalPermission principalPerm2 = new PrincipalPermission(id2,
    role2);
principalPerm1.Union(principalPerm2).Demand();

继承层次结构

System.Object
  System.Security.Permissions.PrincipalPermission

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

PrincipalPermission 成员
System.Security.Permissions 命名空间
PrincipalPermissionAttribute

其他资源

安全权限
请求权限
主体