将你所谓一个表对应到多个Subject,不知可否解决你的问题?

我认为可以使用带参数的操作来解决这个问题。

基本上还是基于RBAC模型,可以对其稍微改进一下:对用户也可以单独授权。其实可以将单个用户、组或者角色都统一看待为subject(主体),将所有资源统一看待为object(客体),然后再加上带参数的操作(operation或activity),这样三元组(s,o,a)就表示了s对o所具有的a操作权限。

我们对(s,o,a)再进行一下扩充(s,o,a,c),c表示condition,即
约束条件。(s,o,a,c)表示s在c条件下对o有a操作的权限。

这样就很容易解决许多问题:
授权的时候将每个用户/组/角色的权限按上述四元组表示清楚即可。用户提出访问请求时,除了查看是否有与用户请求相匹配的四元组,还要看条件是否满足,条件满足的情况下,就允许用户访问;反之,拒绝。

关于对表字段的访问控制,我认为如果你设计的资源管理模块能细化到字段级,那么对字段级的访问控制也就不成问题了。

TO: loreal

agree with you

四元组的抽象确实很精彩!!!
权限管理中一个很重要的东西就是客体对象的粒度大小问题,如果粒度过大,则分配操作简单,但系统功能就弱了;如果粒度过小,系统很灵活,但配置非常复杂,不但开发工作量大,而且可能根本没法用。
以普通的数据库应用为例,一般控制表一级的访问即可以了,这是客体对象的基本粒度为: 表×表操作(增删改,为说明问题,直接把操作也当作对象一部分),象楼主提到的系统,基本粒度为:表×字段×记录×操作,这个量级是不得了的,再加上用户,组,权限,复杂度非常可以了。

这样,修改权限是不是很麻烦呢>?

333

444

这是应用AOP的一个非常好的例子!
所有的有关权限的的操作都是一个cross-cut,把权限操作从代码中解偶,非常漂亮!如果想换一种权限机制,也非常的方便。

> "对于控制到字段的权限模式你能否也提供一点建议呢"
>
> 什么叫控制到字段的权限模式?
其实“控制到字段的权限模式”并没有太大的必要,倒是有一个和它类似的需求:用过TestTrack(一种测试工具)的人一定对过滤器很熟悉吧,我觉得这个东西很有用。

我是新来:)
看到这么多人的观点和见解,受益非浅。
尤其 iceant  让偶茅塞顿开!
努学习!
天天向上!

问题:上面所说的权限设计只能作到粗粒级的控制,无非也就是显示不显示的问题。

但我想实现这样的功能:部门经理可以看到本部门的所有订单数据
员工A可以看到自己的订单数据,而不能看到其他的人数据,而总经理可以看到全部的数据


该如何设计?

(s,o,a,c)四元组,说白了,SQL的 select 语句就是活生生的例子。

你所说的是不是数据权限的问题,最近我也遇到了,而且是要做一个系统的过滤器,比较麻烦,你现在有设计思路了吗

这个网站有一篇非常不错的权限设计的说明和实现,是基于JAVA的

http://www.yido8.com/indexhtml/2007-03/4028813c1167bdd40111690e0a650014.html

http://www.yido8.com/

基于JAVA的权限系统设计与实现
本文档告诉大家怎样去设计一个轻量级的基于方法级别的权限控制系统。文档分为2部分,第一部分为权限系统理论分析,第二部分为用JAVA实现的一个通用权限系统模型,最后用一个简单的实例演示了这个权限控制模型的效果。


基于J2EE的权限系统设计与实现.. 1
1本文的读者对象.. 1
2联系作者.. 1
3权限系统目标.. 1
4权限系统说明.. 2
4.1 权限系统对象.. 2
4.2系统对象之间的关系.. 3
5权限系统功能.. 4
5.1权限系统维护管理.. 4
5.2权限验证控制.. 5
6权限系统JAVA设计与实现.. 7
6.1权限系统模型.. 7
6.2权限分配和管理.. 10
6.3方法级的权限验证实现.. 10
6.4权限控制过程实例.. 12
7编后.. 18