[原创] 简而言之.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  阅读(314)  评论(0编辑  收藏  举报

导航