锁定老帖子 主题:一个可能的列级权限控制方案讨论
精华帖 (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 上控制是否足够安全? 如果需要后台控制, 觉得难度工作量更大. 有做过类似需求的同学, 请不吝发言 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-05-25
其实这个 列级 权限控制跟 实例级 权限控制很类似, 标准的 实例级 权限控制是采用 ACL 实现, 不过其复杂度和执行效率都令人诟病
|
|
返回顶楼 | |
发表时间:2006-05-28
建议先把权限模型确定下来,再考虑如何实现。
ACL = Access Control List,访问控制列表。 另外一个很重要的概念是 RBAC = Role Based Access Contol,可以google一下。 如果对于权限模型经验不多,最好看看相关资料后再确定自己如何设计。个人感觉,权限系统是信息管理系统中非常复杂,也非常容易设计不到位的部分。 下面是一个比较简单的事业部制组织机构及权限模型: 组织结构:建立一颗部门树,部门可以嵌套子部门 职务:建立多种职务,简单系统,职业和部门可以没有关系,比如项目经理,公司所有部门都可以有项目经理的职务 权限:权限和职务关联,比如项目经理可以有以下权限:创建新任务、请假审批等 员工:一个员工,属于一个特定部门,同时可以在一个部门具有多种职务,也可以在多个部门兼任多个职务 |
|
返回顶楼 | |
发表时间:2006-05-29
wainwen 写道 建议先把权限模型确定下来,再考虑如何实现。
ACL = Access Control List,访问控制列表。 另外一个很重要的概念是 RBAC = Role Based Access Contol,可以google一下。 如果对于权限模型经验不多,最好看看相关资料后再确定自己如何设计。个人感觉,权限系统是信息管理系统中非常复杂,也非常容易设计不到位的部分。 下面是一个比较简单的事业部制组织机构及权限模型: 组织结构:建立一颗部门树,部门可以嵌套子部门 职务:建立多种职务,简单系统,职业和部门可以没有关系,比如项目经理,公司所有部门都可以有项目经理的职务 权限:权限和职务关联,比如项目经理可以有以下权限:创建新任务、请假审批等 员工:一个员工,属于一个特定部门,同时可以在一个部门具有多种职务,也可以在多个部门兼任多个职务 你说了这么多, 跟我要做的列级权限控制有什么关系? |
|
返回顶楼 | |
发表时间:2006-05-30
Feiing 写道 wainwen 写道 建议先把权限模型确定下来,再考虑如何实现。
ACL = Access Control List,访问控制列表。 另外一个很重要的概念是 RBAC = Role Based Access Contol,可以google一下。 如果对于权限模型经验不多,最好看看相关资料后再确定自己如何设计。个人感觉,权限系统是信息管理系统中非常复杂,也非常容易设计不到位的部分。 下面是一个比较简单的事业部制组织机构及权限模型: 组织结构:建立一颗部门树,部门可以嵌套子部门 职务:建立多种职务,简单系统,职业和部门可以没有关系,比如项目经理,公司所有部门都可以有项目经理的职务 权限:权限和职务关联,比如项目经理可以有以下权限:创建新任务、请假审批等 员工:一个员工,属于一个特定部门,同时可以在一个部门具有多种职务,也可以在多个部门兼任多个职务 你说了这么多, 跟我要做的列级权限控制有什么关系? 抱歉,有些跑题。 我有点印象,好像是前面有贴子提到不太了解ACL,因此多说了几句,呵呵。 |
|
返回顶楼 | |
发表时间:2006-05-30
哪能嘎麻烦?映射数据库嘛?如果这些字段都对应于数据库,为什么不对某些字段做一次ORM,对另外一些字段再做一次ORM,这样一来,你的隔离就针对对象了。
|
|
返回顶楼 | |
发表时间:2006-05-30
跟我准备做的自定义列表有点相似。
而我的设想是用自定义标签完成。 就我这情况而言,最麻烦又最想解决的是数据量的问题。 而你的权限就用自定义 标签就差不多了。 |
|
返回顶楼 | |
发表时间:2006-06-01
<p>个人认为,当前的需求是做 实例级的访问控制,用acl模型和rbac应该都无所,用acl的话最终要得到当前用户对该实例的访问控制列表,如果用rbac的概念描述就是得到当前ob的ops,其实是一样的,用什么模型取决于当前的安全需求是object central 还是 user central。
<p>在通常的分层实现的j2ee应用程序中,通常有两个切面可以获得实例 web 层 在进入controller之前, 通过分析request得到当前实例,进行控制, service层,使用aop通过分析service method的参数得到实例,进行控制。 <p>大概就是这样思路,具体实现起来有太多的细节需要考虑。 看过很多成功的web应用都是用acl,用rbac的还罕有,见过的rbac大都走了样子,只剩下一个rabc的概念. |
|
返回顶楼 | |
发表时间: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中,在读写和执行程序对象前,系统将测试请求者是否有权限提出这一请求。例如,程序测试者有权读程序和运行程序,但无权写程序,或更改程序。 |
|
返回顶楼 | |
发表时间:2006-07-13
ACL一般应用于用户数少(相对于权限)的场景,性能好是它的特点
RBAC一般应用于用户多,权限也多的场景,灵活是其主要解决的问题 说大了,世界上权限控制方式只有两种,一种是控制单体数据(怎么叫都好,什么行数据,实例数据都可以),另外一种是控制数据集合的权限.ACL,RBAC和这种划分是没有冲突的.所谓的列数据控制,其实是控制数据集合权限的变形罢了. 在这上面糊涂的人,其实是没有搞清楚自己到底要控制什么罢了.在说明白点,就是上面说的控制数据attr,其实应该控制的是operation(business logic) |
|
返回顶楼 | |