精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-16
最后修改:2011-05-16
dancewing 写道 说到细粒度的权限控制,比如domain 级别的,只是控制好你读取方法的权限就行了,个人觉得不需要用ACL那些玩意,那...蛋疼。。 读取方法的权限,还是方法级别的。我想做到的是: 1、有一个Customer信息表,业务员甲能看到自己的客户,业务员乙也能看到自己的客户,部门经理能看到本部门的客户,总经理能看到全部客户。 2、有一个交易金额表,拥有甲权限的能看到金额小于1万的数据,拥有乙权限的能看到金额小于100万的数据, 。。。。 以前有一个想法: (一),将权限表划分为 1、 用户(user) id username password 2、 角色(role) id rolename 3、用户角色(userrole) userid roleid 4,权限(auth): id authname 5, 规则(ruleinfo): id ruleInfo ruleType 6, 权限规则(authrule): authid,ruleinfoid 7,资源(resource) id resourcetype resource 8 ,权限资源(authresource) authid resourceid 和普通的权限方案最大的不同就是多了一个权限规则 系统初始化时的缓存内容: (1)、资源及权限的对应关系 (2)、角色-权限规则的对应关系 (3)、权限规则 处理流程 1,用户登录时,获取用户角色,根据角色-权限规则对应关系,把当前用户所拥有的权限规则放入每个用户的上下文中。 2、 在web下,设置一个Filter,这个filter中,可以获取到用户的访问地址(基于URL拦截),如果存在于资源权限对应中,则进行拦截 3、判断此资源所需要的权限,如果当前用户上下文的权限匹配所需要的全部权限,则放行, 4、根据资源权限关系,获取到权限,根据权限,获取到权限规则, 将此次请求的权限规则放入请求线程中,如SecurityContextHolder中 5,程序中可以根据权限规则列表动态组装SQL 及拦截 举例: /user/list.do地址显示所有的用户 需要的权限为USER_VIEW 当前用户 拥有USER_VIEW权限,及权限规则列表 (一) ruleInfo="department_EQS" ruleType="department"(部门) (二)ruleInfo="age_GTI_40" ruleType="free"(自定义) 在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条件)。如果用Hibernate,非常比较方便 至少,比Spring Security的事后拦截比起来:第一,无需额外的几张表;二,没有太多的Filter,就一个 , 三、速度和效率肯定比SS强,资源在初始化的时候就加载 四:调用方法时过滤处理的数据更少,已经将不符合条件的过滤掉了 五:便于分页,如果采用SS的话,每页50条,SS在调用方法返回时过滤掉若干条,返回来的页面,每页的结果总是不同 关键是权限规则的定义和设置 JAVAEYE里面的牛人很多,给点指导意见! |
|
返回顶楼 | |
发表时间:2011-05-16
上面说了查询过滤。顺便说一下增删改的过滤方法
增删改时: 可以根据ruleInfo 检验此次操作的实体对象,是否匹配这个规则,运用反射及工具类很容易就实现了。 |
|
返回顶楼 | |
发表时间:2011-05-16
一般的增删查改,大多数应用都是放在一个通用的基类里面,如果采用这种方法的话,只需定义好权限规则即可,不必满处都是和业务系统耦合相关的代码:如if(xxx>yy)
else ... 当业务规则调整时,只需简单更改Ruleinfo即可 而不必到处去找到底哪些地方有判断 |
|
返回顶楼 | |
发表时间:2011-05-17
各系统的业务数据都不一样``通用的框架不太好做的这么细吧```
|
|
返回顶楼 | |
发表时间:2011-05-17
dancewing 写道 在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条 不知道有没有考虑过规则很多的情况下,SQL超长的问题? |
|
返回顶楼 | |
发表时间:2011-05-17
Spring Security已经发展了好几年了,算是Java领域中比较成熟的一个安全框架了。在项目中还是继续用Spring Security,Apache Shiro还需要观望。
|
|
返回顶楼 | |
发表时间:2011-05-17
eya 写道 dancewing 写道 在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条 不知道有没有考虑过规则很多的情况下,SQL超长的问题? 1,如果是换做你硬编码的话,SQL的长度也少不了多少 2,这样做的好处在于灵活,当你权限规则变了的话,修改一下配置就可以了,如:部门经理审批金额为30万以下的 你只需要改一下规则, 如果硬编码及团队协作的话。规则改变后,再去搞代码的话,很费劲 3,与应用解耦。权限本来就是一个独立的东西,和业务混合在一起。对开发和维护都不便 |
|
返回顶楼 | |
发表时间:2011-05-20
目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。
Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。 |
|
返回顶楼 | |
发表时间:2011-05-20
mmBlue 写道 目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。
Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。 有没有 Shiro的详细资料和说明 |
|
返回顶楼 | |
发表时间:2011-05-24
eya 写道 mmBlue 写道 目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。
Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。 有没有 Shiro的详细资料和说明 http://apache.etoak.com//shiro/1.1.0/shiro-root-1.1.0-source-release.zip 解压后samples里面。 springside4: http://springside.googlecode.com/svn/springside4/trunk/examples/mini-web 文档不是很多,除了官方外,网上找到过的: http://www.ibm.com/developerworks/cn/opensource/os-cn-shiro/ |
|
返回顶楼 | |