Keep moving...
Do right thing, then do thing right.
posts - 61,comments - 71,trackbacks - 0

在使用PrincipalPermissionAttribute实现权限控制的时候,关于PrincipalPermissionAttribute的用法,有几点是需要注意的。

1.PrincipalPermissionAttribute只能作用于类或其方法。

PrincipalPermissionAttribute不能作用域接口及其接口方法。例如在定义WCF的服务契约时,不能将PrincipalPermissionAttribute放于服务接口或其方法之上。

2.类级别的权限控制优先于方法级别的权限控制。

类级别的权限控制,是在类实例化的时候进行控制,而方法级别的权限控制,则是在方法执行前进行权限控制。例如对于一个普通的类,你既在类的级别上做权限控制,又在方法级别上做权限控制。那么类级别的控制先被执行,因此类上可以放置基本的或者共同的权限,而方法上可以放一些各自不同的特殊权限。

3.权限控制应该放于基类上,而不能放于任何派生类上。

派生类的层面上不能增加权限控制,只能在派生类中的override的方法上增加权限控制,而override方法上的权限控制也将取代基类中该方法的权限控制。对于new方法,要和其基类方法一样增加权限控制,权限控制是否生效的依据是,看哪个方法被执行。

4.PrincipalPermissionAttribute应该用于公有方法,而非私有方法。

用于私有方法不是不可,但对于权限控制来说,容易造成重叠,而且不利于在框架层面实现权限控制。最为理想的权限控制,对于一个执行路径(一个主线程内)来说,如果没有分支及其权限控制的需要,只做一次权限控制最好,以避免权限控制带来的性能问题。在这个问题上可以借鉴CoC的思想。

posted on 2011-06-01 01:11 Bright Zhang 阅读(672) 评论(0) 编辑 收藏