接触CAS(一)

Author:水如烟
 
这几天接触 CodeAccessPermission ,目的是看看权限是如何控制的,结果是头越来越头,脑袋越来越紧,糊涂哪。
 
涉及的概念太多了。对于象我一样的只是玩玩看看编编程序的好事之徒来说,要短时间内消化它真的好难。所以只有在 BLOG 上置一个专题,慢慢的来领会它。
 
基于自己的理解,实现 CAS ,应该有三个地方需要着眼:
A、 定义权限
B、 目标标识
C、 程序域部署
 
现在仅仅略知 A B 的一些皮毛, C 还没接触。
 
自定义代码访问权限,必须实现 System.Security.CodeAccessPermission(CAP) 。关于 CAP MicrosoftTechNET 的一篇文章,《 如何:创建自定义加密权限 》说得很清楚。这里是它提供的一张图示,以下也重打它的说明(一个字一个字打,不复制粘贴):
 
图中 EncryptionPermission 是其文要实现的一个加解密权限。
 
实现 CAP ,通常只是实现图中所示的七个方法: Copy Union Interset IsSubsetOf IsUnrestricted FromXml ToXml 。意义如下:
Copy ,创建一个与当前权限实例完全相同的副本,并将其返回调用方。思考:调用方 A 是谁, A 什么时候需要这个副本, A 用这个副本做些什么事了。
Union ,返回一个权限对象,该对象是在当前权限和提供的权限之间的并集结果。思考:这个“当前权限”和“提供权限”哪是哪哪。
Interset ,返回一个权限对象,该对象是在当前权限和所提供的权限之间的交集结果。
IsSubsetOf ,返回一个布尔值,以提示当前权限是否是所提供的权限的子集。如果是子集,则当前权限的每项状态都必定在目标权限中。
IsUnrestricted ,如果权限实例处于不受限制状态,此方法返回 True
FromXml ToXml ,前者将 XML 格式转换为权限对象实例,后者将权限对象的实例转换为 XML 格式。用于支持序列化。如,当程序集元数据中存储安全性属性时,将使用这些方法。
 
上面方法中有关权限集合运算的,如子集,交集,并集,是基于“状态”枚举,这个“状态”枚举,一般是操作类型的枚举,如可读、可写、可删除,简单的就是: Read Write Delete
还要表示出全无,全有,所以都需要 No All 。要表示出来,能够按位运算,枚举类就需要标识 <Flag> ,同时也要给出各个状态值。
 
如:
<Flags>_
Public Enum FileAccessFlags
       NoFlags = 0
       Read = 1
       Write = 2
       Delete = 4
       AllFlags = 7
End Enum
文件中常用到的操作权限,还有可读写,它是 Read Or Write,可以补充为:
<Flags>_
Public Enum FileAccessFlags
       NoFlags = 0
       Read = 1
       Write = 2
       ReadWrite = 3
       Delete = 4
       AllFlags = 7
End Enum
 
定义权限有三个步骤,就是:定义操作枚举,实现 CodeAccessPermission ,实现 CodeAccessSecurityAttribute 。任何一个权限,内容类似,差别仅是状态枚举不一样,当然,名称也不一样。基于此,我就写了一个模板工具,只要给出名称和状态枚举值,就自动生成这三个文件。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值