[原创] 简而言之.NET Code Access Security (CAS)
首先推荐一篇好文:Managing .NET Code Access Security (CAS) Policy
然后简单谈谈CAS:
CAS有4个Policy Level,Enterprise -> Machine -> User -> (AppDomain),我们在.NET Configuration Tool里可以配置前3个,第4个通过代码配置;
每个Policy Level中包含了若干Code Group;
Code Group是CAS的核心,每个Code Group拥有一个MemberShip Condition和一个Permission Set;
将多个Permission组成一个Permission Set是为了便于管理;
Code Group是分配Permission Set的最小粒度;
在同一个Policy Level中,一个Code根据其Identiy可以属于多个递进的Code Group;
一段Code在通过某个Policy Level审查后所获得的权限集合,是该Code在Policy Level中所属的每个Code Group之间权限集合的 并集;
一段Code在通过整个CAS系统审查后获得的最终权限集合,是在所有Policy Level获得权限集合的 交集;
为什么某个Policy Level中的Code Group要组织成树状层次结构呢?可以看下面这个比方:
回想一下我们平时是判断某个人具有哪些权力的?
首先他是中国公民,所以他具有中国基本人权;
中国公民下一级别可以细化为工人,农民,公务员。。。于是我们进一步考察这个人,发现这个人居然还是个公务员,于是他就多了一个享受免费社保的权力;
公务员进一步可分为当官的和跑腿的,于是我们进一步考察这个人,发现这个人祖上积德居然还是个当官的,于是他就又多了一个公费旅游的权力。。。
由此可见,CAS按照层次来组织Code Group是合理的,某个Policy Level最终的权限结果的确应该是各个Code Group层次的权限并集。
随着Code Group层次的递进,我们对Code Identiy的认识越深入,可以赋予它的权力也就越多。
而Policy Level就好比中央政*府和地方政*府,中央提出一个Policy,而地方也提出一个Policy,为了让大家都有面子,最终的Policy是双方的交集。
posted on 2010-10-04 22:03 smwikipedia 阅读(320) 评论(0) 编辑 收藏 举报