论坛首页 Java企业应用论坛

一个可能的列级权限控制方案讨论

浏览 22835 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-05-25  
最近的项目需要做到列级权限控制,  大意如下

public class DomainObject {
   private String attr1;
   private String attr2;
}


需求是 角色1 可对 attr1  进行读操作, 对 attr2 进行写操作,  而 角色2  对 attr1, attr2 都没有读权限.

目前考虑的方案 : 主要是在 ui 上控制, 如果没有读权限, 则显示空或无权限, 如果只有读权限, 则控制输入框为只读.

实现 : 建一张表用以纪录角色对 DomainObject   各属性的权限,  使用 webwork interceptor  拦截所有页面上的 ww 标签访问,  然后到配置表中查找权限信息,  如果查到匹配,  就将信息记录在一个集合中(类似 fieldError), 不妨称之为 fieldSecurityInfo,   最后更改标签模板,  根据 fieldSecurityInfo 中的信息做相应控制, 感觉大体可行.

目前的问题是 :

1. 如何拦截 <ww:> 标签的访问 ?
2. 只在 ui 上控制是否足够安全? 如果需要后台控制,  觉得难度工作量更大.


有做过类似需求的同学,  请不吝发言 
   发表时间:2006-05-25  
其实这个 列级 权限控制跟 实例级 权限控制很类似,  标准的 实例级 权限控制是采用 ACL 实现,  不过其复杂度和执行效率都令人诟病
0 请登录后投票
   发表时间:2006-05-28  
建议先把权限模型确定下来,再考虑如何实现。
ACL = Access Control List,访问控制列表。
另外一个很重要的概念是 RBAC = Role Based Access Contol,可以google一下。
如果对于权限模型经验不多,最好看看相关资料后再确定自己如何设计。个人感觉,权限系统是信息管理系统中非常复杂,也非常容易设计不到位的部分。
下面是一个比较简单的事业部制组织机构及权限模型:
组织结构:建立一颗部门树,部门可以嵌套子部门
职务:建立多种职务,简单系统,职业和部门可以没有关系,比如项目经理,公司所有部门都可以有项目经理的职务
权限:权限和职务关联,比如项目经理可以有以下权限:创建新任务、请假审批等
员工:一个员工,属于一个特定部门,同时可以在一个部门具有多种职务,也可以在多个部门兼任多个职务
0 请登录后投票
   发表时间:2006-05-29  
wainwen 写道
建议先把权限模型确定下来,再考虑如何实现。
ACL = Access Control List,访问控制列表。
另外一个很重要的概念是 RBAC = Role Based Access Contol,可以google一下。
如果对于权限模型经验不多,最好看看相关资料后再确定自己如何设计。个人感觉,权限系统是信息管理系统中非常复杂,也非常容易设计不到位的部分。
下面是一个比较简单的事业部制组织机构及权限模型:
组织结构:建立一颗部门树,部门可以嵌套子部门
职务:建立多种职务,简单系统,职业和部门可以没有关系,比如项目经理,公司所有部门都可以有项目经理的职务
权限:权限和职务关联,比如项目经理可以有以下权限:创建新任务、请假审批等
员工:一个员工,属于一个特定部门,同时可以在一个部门具有多种职务,也可以在多个部门兼任多个职务


你说了这么多,  跟我要做的列级权限控制有什么关系?
0 请登录后投票
   发表时间:2006-05-30  
Feiing 写道
wainwen 写道
建议先把权限模型确定下来,再考虑如何实现。
ACL = Access Control List,访问控制列表。
另外一个很重要的概念是 RBAC = Role Based Access Contol,可以google一下。
如果对于权限模型经验不多,最好看看相关资料后再确定自己如何设计。个人感觉,权限系统是信息管理系统中非常复杂,也非常容易设计不到位的部分。
下面是一个比较简单的事业部制组织机构及权限模型:
组织结构:建立一颗部门树,部门可以嵌套子部门
职务:建立多种职务,简单系统,职业和部门可以没有关系,比如项目经理,公司所有部门都可以有项目经理的职务
权限:权限和职务关联,比如项目经理可以有以下权限:创建新任务、请假审批等
员工:一个员工,属于一个特定部门,同时可以在一个部门具有多种职务,也可以在多个部门兼任多个职务


你说了这么多,  跟我要做的列级权限控制有什么关系?

抱歉,有些跑题。
我有点印象,好像是前面有贴子提到不太了解ACL,因此多说了几句,呵呵。
0 请登录后投票
   发表时间:2006-05-30  
哪能嘎麻烦?映射数据库嘛?如果这些字段都对应于数据库,为什么不对某些字段做一次ORM,对另外一些字段再做一次ORM,这样一来,你的隔离就针对对象了。
0 请登录后投票
   发表时间:2006-05-30  
跟我准备做的自定义列表有点相似。

而我的设想是用自定义标签完成。
就我这情况而言,最麻烦又最想解决的是数据量的问题。
而你的权限就用自定义 标签就差不多了。
0 请登录后投票
   发表时间:2006-06-01  
&lt;p&gt;个人认为,当前的需求是做 实例级的访问控制,用acl模型和rbac应该都无所,用acl的话最终要得到当前用户对该实例的访问控制列表,如果用rbac的概念描述就是得到当前ob的ops,其实是一样的,用什么模型取决于当前的安全需求是object central 还是 user central。
    &lt;p&gt;在通常的分层实现的j2ee应用程序中,通常有两个切面可以获得实例
web 层 在进入controller之前, 通过分析request得到当前实例,进行控制,
service层,使用aop通过分析service method的参数得到实例,进行控制。
    &lt;p&gt;大概就是这样思路,具体实现起来有太多的细节需要考虑。
看过很多成功的web应用都是用acl,用rbac的还罕有,见过的rbac大都走了样子,只剩下一个rabc的概念.
0 请登录后投票
   发表时间:2006-07-04  
Feiing 写道
其实这个 列级 权限控制跟 实例级 权限控制很类似,  标准的 实例级 权限控制是采用 ACL 实现,  不过其复杂度和执行效率都令人诟病

      ACL是什么东东?这么牛?我一直思考着基于列的权限控制,复杂度和效率一直是让我不敢着手和思考的原因。
    我曾经做到过数据行的管理与控制,据说Oracle做到行与列的管理控制。
    我曾经尝试想用ValueObject的原理去考量基于列的控制,自今也没有一个可以去实现的方案。
    刚刚查了一下google, ACL 指Access Control List 。是否如楼上所说的?
引用
ACL(access control list)

访问控制表

ACL是存在于计算机中的一张表,它使操作系统明白每个用户对特定系统对象,例如文件目录或单个文件的存取权限。每个对象拥有一个在访问控制表中定义的安全属性。这张表对于每个系统用户有拥有一个访问权限。最一般的访问权限包括读文件(包括所有目录中的文件),写一个或多个文件和执行一个文件(如果它是一个可执行文件或者是程序的时候)。Windows NT,Novell公司的Netware,Digital公司的 OpenVMS和基于UNIX系统是使用这种访问控制表的系统。而此表的实现在各个系统中却不一样。

在Windows NT中,每个系统对象和一个访问控制表相关。每个ACL都有一个或多个访问控制入口,包括用户名或用户组的名称。对于每个用户,组或人物,他们的访问权限在表中的一个位串中记录。一般说来,系统管理员和对象的所有者创建对象的访问控制表。

作为一个一般的例子,试想一个三个用户的操作系统,在其中一个人是程序员,另一个是程序测试员最后一个是系统本身。ACL中的程序对象可能如下所示:

programmer read write execute

tester read execute

system execute

在这个三个入口的ACL中,在读写和执行程序对象前,系统将测试请求者是否有权限提出这一请求。例如,程序测试者有权读程序和运行程序,但无权写程序,或更改程序。
, 但是我看不出,这对基于数据行与数据列的权限控制有任何指导的意义啊?
0 请登录后投票
   发表时间:2006-07-13  
ACL一般应用于用户数少(相对于权限)的场景,性能好是它的特点
RBAC一般应用于用户多,权限也多的场景,灵活是其主要解决的问题
说大了,世界上权限控制方式只有两种,一种是控制单体数据(怎么叫都好,什么行数据,实例数据都可以),另外一种是控制数据集合的权限.ACL,RBAC和这种划分是没有冲突的.所谓的列数据控制,其实是控制数据集合权限的变形罢了. 在这上面糊涂的人,其实是没有搞清楚自己到底要控制什么罢了.在说明白点,就是上面说的控制数据attr,其实应该控制的是operation(business logic)
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics