欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 »  .NET本质论第一卷:公共语言运行库教程 » 正文

本教程章节列表
最新评论

.net安全性-合并的权限集

创建时间:2013年04月29日 20:44  阅读次数:(4628)
分享到:
合并不同类型的权限通常来说是有意义的。为此,CLR提供了PermissionSet类型,用于聚集任意类型的权限对象。一个PermissionSet对象对每一种权限类型最多持有一个权限对象。加入一个已经为权限集所持有的类型的权限对象,会导致这个权限对象和已经持有的权限对象合并起来。例如,考察下面的c#方法:
static void DoIt(){
FileIOPermissionAccess all=FileIOPermissionAccess.AllAAccess;
SecurityPermissionFlag f1=SecurityPermissionFlag.Execution;
SecurityPermissionFlag f2=SecurityPermissionFlag.SkipVerification;

PermissionSet ps=new PermissionSet(PermissionState.None);
ps.AddPermission(new SecurityPermission(f1));
ps.AddPermission(new SecurityPermission(f2));
ps.AddPermission(new FileIOPermission(all,@”C:\etc”));
}

在这个方法末尾,刚刚创建的权限集容纳有两个权限对象,一个类型是FileIOPermission,另一个类型是SecurityFermission,它们都允许Execution和SkipVerification。

PermissionSet类型支持IPermission接口中三个面向集合的操作(Union、Intersect和IsSubsetof)。PermissionSet对这三个方法的实现仅仅是遍历权限对象个体并对第二个权限集中匹配的权限对象执行集合操作,如图9.6所示。
合并的权限集
合并的权限集

对PermissionSet对象执行集合操作是很平常的。例如,考虑下面的c#代码:
static void DoIt()
{
FileIOPermissionAccess all=FileIOPermissionAccess.AllAccess;
SecurityPermissionFlag f1=SecurityPermissionFlag.Execution;
SecurityPermissionFlag f2=SecurityPermissionFlag.SkipVerification;

PermissionSet ps1=new PermissionSet(null);
PermissionSet ps2=new PermissionSet(null);
PermissionSet ps3=new PermissionSet(null);
ps1.AddPermission(new SecurityPermission(f1));
ps2.AddPermission(new SecurityPermission(f2));
ps2.AddPermission(new FileIOPermission(all,@”C:\etc”));
}

这段代码与先前例子的代码生成同样的权限集,虽然方式不那么直接。

权限集还可以授予无限制的限制,这是通过传递PermissionStateUnreatricted到权限集的构造器中实现的;当一个权限集被授予无限制的权限时,假如权限类型支持IUnrestrictedPermission接口的话,它就隐含地支持所有可能权限类型里的所有可能操作。一个被授予了无限制权限的权限集,并未隐式地授予任何不支持IUnrestrictedPermission接口的权限类型(例如,标识权限)的权利,然而,在无限制的权限集上调用AddPermission方法显式地授予这些专门的权限是合法的。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 4+35=? 的结果(结果是:39)
结  果: