用户权限设置和Composite模式


这个设计挺优雅,Group里可以添加Group和User……子又有孙、孙又生子,子子孙孙,无穷匮焉……不过,扯点题外话:在实际的应用当中,用户和用户组的关系不是这样简单的,一个用户是否具有某种权限,首先要看它自己(而不是组)是不是明确地拥有该权限,如果明确拥有,则它肯定有此权限;如果明确拒绝,则肯定无此权限;如果既未拥有也未拒绝,才去查看它的每一个组是不是拥有此权限,换句话说:仅当一个用户未明确拥有或拒绝某个权限时,该权限才从用户组继承

从这一点上来说,“用户”和“用户组”这两个类,它们的行为并不一致,简单地说,Group类只有GrantPurview的行为,而User类却同时还有DenyPurview以及ClearPurview这两个行为,用户使用它们,就必须知道Group和User的区别,知道它们是哪一个具体子类。应用Composite模式的意图是“对单个对象和组合对象的使用具有一致性”,而Group和User完全是两种不同的类,如果使用者必须弄清他们正在使用哪一个具体子类,那么就不具有一致性。换句话说,如果UserBase这个接口也有DenyPurview和ClearPurview,那么在Group的实现里,就必然是一个退化函数。(至于User里AddChild方法抛出异常,这个倒可以在安全性和透明性上权衡)。

啊,再说一遍,题外话而已,没有否定黄MM的意思 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值