读书人

一个也许的列级权限控制方案讨论

发布时间: 2012-11-06 14:07:00 作者: rapoo

一个可能的列级权限控制方案讨论
最近的项目需要做到列级权限控制, 大意如下


抱歉,有些跑题。
我有点印象,好像是前面有贴子提到不太了解ACL,因此多说了几句,呵呵。
你回帖的人 有使用 DS 做 Access Control ?public class DomainObject { private String attr1; private String attr2;}


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

我到是不建议把这些放到web层处理,应该放到logic层。
public class Field{
private String name;
private Object value;
private type class;
private isRead;
private isWrite;
private String role;
}

public class DomainObject implment IDomain{
private Field attr1;
private Field attr2;
}

如果配置什么的看编程技巧了,我是把这些业务表的列都生成xml,角色和表列的关系也在xml中,启动web服务器时把没个角色 规则实例化成 一个java对象,如果修改角色,只要修改内存中java对象和xml就可以了。
经过实践,比放数据库中简单。 18 楼 riss 2006-07-15 wolfsquare 写道

引用这个都可以做到行级的访问控制了.
我还真没听说过Oracle可以做到一个表中某几行可以由某人修改,另外几行又只能只读什么的,能说清楚点么?


Oracle高级安全特性中有个"精细存取控制",这是我在<Oracle专家高级编程>中学得,并在实际项目中用到.
Oracle标准版是没有这个特性地!只有企业版的才有!当然标准版了可以通过一个小巧门可以做到.
比较有意思的东西!!! 19 楼 独狼 2006-07-15 引用如果配置什么的看编程技巧了,我是把这些业务表的列都生成xml,角色和表列的关系也在xml中,启动web服务器时把没个角色 规则实例化成 一个java对象,如果修改角色,只要修改内存中java对象和xml就可以了。
经过实践,比放数据库中简单。
这种方式对维护者就是恶梦啊。。。 20 楼 zkj_beyond 2006-07-16 独狼 写道引用如果配置什么的看编程技巧了,我是把这些业务表的列都生成xml,角色和表列的关系也在xml中,启动web服务器时把没个角色 规则实例化成 一个java对象,如果修改角色,只要修改内存中java对象和xml就可以了。
经过实践,比放数据库中简单。
这种方式对维护者就是恶梦啊。。。
我不认为复杂。和你建立权限表一样!可能更简单。

这里我把这个xml当成数据库。你把这个xml转化成表单是如此的容易。
我用xstreame上瘾了。先定义java对象,然后确定xml.

private class RoleMapping{
private String role;
private String tableName;
String[] fieldName;
Boolean[] isReaders;
Boolean[] isWriters;
............................

}
其实控制权限的就这一堆对象,初始化这个对象的是 需要 控制权限的表极其字段。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

不知道大家用过lotus domain开发过OA没有,它的字段控制和楼主的需求类似。 21 楼 凤舞凰扬 2006-07-18 引用
我还真没听说过Oracle可以做到一个表中某几行可以由某人修改,另外几行又只能只读什么的,能说清楚点么?
基于行的安全控制,Oracle 早就做到了。http://www.oracle.com/technology/oramag/oracle/03-jul/o43security.html
引用ACL一般应用于用户数少(相对于权限)的场景,性能好是它的特点
RBAC一般应用于用户多,权限也多的场景,灵活是其主要解决的问题
说大了,世界上权限控制方式只有两种,一种是控制单体数据(怎么叫都好,什么行数据,实例数据都可以),另外一种是控制数据集合的权限.ACL,RBAC和这种划分是没有冲突的.所谓的列数据控制,其实是控制数据集合权限的变形罢了. 在这上面糊涂的人,其实是没有搞清楚自己到底要控制什么罢了.在说明白点,就是上面说的控制数据attr,其实应该控制的是operation(business logic) 说实话,我的确不理解ACL从实现上对基于列的控制有什么作用,如果只是讨论所谓的概念,我也写得很清楚了http://forum.iteye.com/viewtopic.php?t=20586&postdays=0&postorder=asc&start=15。 就是基于ACL也好,基于RBAC也好,说到底只是权限控制的行为方式,而并非怎么去寻找一个更好的思路去实现基于行控制的行为。 如果要把基于属性的控制泛化为operation,基本就没得谈了。
引用现在一般的Web应用,由于使用Connection Pool,一般数据库用户都使用的同一个。所以依赖数据库的访问控制机制是不行的。

普遍的,全面的属性级访问控制是否有必要?象ACEGI的话也只是支持对象级的访问控制。 那确实,在绝大多数情况,甚至列对象级的控制都是不需要的。不过既然谈到了这个问题,也就是存在了需求。 22 楼 BirdGu 2006-07-19 ACL也好,RBCL也好,准确地说都属于访问控制的策略,而不是具体的实现方式。 23 楼 xgylog 2006-08-04 如果建权限表,个人感觉后台实现比较好,通过session bean 和自定义标签,一条sql即可完成,权限表实际起到字典的作用,不过最好给业务管理员留下管理功能,可以灵活的控制各个权限级别访问类型的变更和角色的增加。

读书人网 >软件架构设计

热点推荐