我以前了解过的权限管理,一般都是 用户—角色—资源 ,其中用户表示存储用户信息,角色存储角色信息,资源存储url请求路径,名称==;他们之间都是多对多的关系。
但是近来接触到一个权限管理是 用户—角色—权限—资源;他们存储的东西都一样,但是多了一个权限表;这个表有什么用?有必要要多写这样的一个表么? 我的想法是,查看一个用户可以请求那些资源,只要查出他拥有那些角色,每个角色可以请求哪些资源,用用户—角色—资源就可以把整个关系表达出来,但是现在加上一个权限表,这个有什么好处??? 欢迎各位热烈讨论
但是近来接触到一个权限管理是 用户—角色—权限—资源;他们存储的东西都一样,但是多了一个权限表;这个表有什么用?有必要要多写这样的一个表么? 我的想法是,查看一个用户可以请求那些资源,只要查出他拥有那些角色,每个角色可以请求哪些资源,用用户—角色—资源就可以把整个关系表达出来,但是现在加上一个权限表,这个有什么好处??? 欢迎各位热烈讨论
解决方案 »
- Hibernate的clear方法
- 使用xml作为数据源,jsp:Menu类自由扩展菜单项怎么实现
- byte data[] = new byte[length];这个length最大长度为多少
- 关于通用的泛型方法,如何解析的问题
- struts2 加入json插件 的配置问题
- 关于调用axis2 webservice的问题~~~急急
- 请问:我把一些相关的class 打了一个jar包之后如何才能调用到我jar包里的类呢?
- 如何配置Hibernate与SQL Server 2000
- ejb发生异常,请进来看看,多谢了
- struts项目,tomcat报错,帮帮我好吗?
- 问一下论坛和问答是怎么做的
- 关于Many to one的问题
用户id .... 用户角色id
角色:
角色id 角色名称
资源:
资源id 可访问url
权限:
角色id 资源id
好像有点懂了,可否举一个例子,在下愚钝,望赐教例如有一个用户叫张三,他有2个角色:员工和财务,员工角色可以增删改查考勤记录,财务角色可以增删改查查工资;
如果你需要对资源修改权限,(员工角色的权限太大)不是只要把 role_resource表的增改删 干掉就行了吗?
用你的张三的例子来说,如果 角色-资源 的关系,删除权限就是干掉role_resource的记录,如果是增加权限,就要增加 role,增加role_resouce,修改user
而如果是 角色-权限-资源 的关系,增加删除权限,只需要修改 role_authority (增加或干掉)
例如张三是一个员工,有查询考勤记录的权限
如果是用户-角色-资源关系的话 user表记录用户信息,user_role表记录张三userID和员工角色roleID role表记录角色信息 role_resource表记录员工roleID和rescourceID resource表记录资源(查询考勤记录的URL)如果是角色-权限-资源 的关系该如何记录?
如果是角色-权限-资源
role_authority 记录 roleId和authorityId
authority_resource 记录 authorityId和resouceId
分别插入4条记录,来表示增删改查的权限,如果某个角色有4种权限,那么他在role_resource就有4条记录,
如果某个角色只有查权限,那么他在role_resource就只有1条记录那如果是角色-权限-资源关系的话,某个角色只拥有增删权限,某个角色只拥有查权限是如何存储??
如果是用户-角色-资源关系的话 user表记录用户信息,user_role表记录张三userID和员工角色roleID role表记录角色信息 role_resource表记录员工roleID和rescourceID resource表记录资源(查询考勤记录的URL)分别插入4条,那么你的roleId和resourceId怎么作为唯一识别的?也就是哪条记录代表角色拥有增权限?哪条记录代表角色拥有删权限呢?那是不是就需要多个角色了?(因为相同的resourceID,必须roleId不同才能保证唯一识别)
所以还是离不开权限,在你这种情况下,除了保存roleId和resourceId,还应该保存一个权限值,该值就是角色对应资源的权限,比如查是1,增是2,删是4,改是8,那么拥有增删就是2+4=6,拥有查增就是1+2=3等等(其实就是二进制的方式0代表无权限,1代表有权限,增删查改分别对应二进制不同的位置,当然也可以自己任意设计权限值,只要觉得可以灵活处理就好)如果是角色-权限-资源关系的话,某个角色只拥有增删权限,某个角色只拥有查权限是如何存储??上面说了,在你的情况下可以增加一个权限值来达到权限的控制,那么把这个权限值用表的方式来存储而不是值的方式存储,这就有了 角色-权限-资源 三方关系表,该表保存
roleId,authorityId和resourceId
比如张三对应的财务角色,那么就保存
财务角色ID,权限ID,资源ID其中权限表里保存
权限ID,对应的权限这样的话,角色-权限-资源 里插入某个角色ID,某个种权限ID,某个资源ID,就能达到某个角色对某种资源拥有某种权限的目的至于这个权限是用值的方式好还是用表的方式,完全取决于项目的具体需求,即得前段时间有人发过帖子问,说用权限值的方式达到了最大上限了,如果再扩展权限值,所以表的方式有时也有一定的方便,不过查询时要多表关联,也会降低一些性能。
首先非常感谢你的回答;
分别插入4条,那么你的roleId和resourceId怎么作为唯一识别的?
我和你了解的差别可能是对于资源的定义,角色-资源关系里,增删改查对应着4个不同的资源,因为他们的请求路径不一定,所以他们有4个不同的resourceID,所以在在role_resource里roleID+resourceID可以唯一确定一条记录。按你说那种设计,资源的定义应该是对应一个资源,它的增删改查都是对应着同一个资源,例如财务角色有增删改查工资表的权限,那么按你的设计,那么工资表就是一个资源就对应着resource表的一条记录;而按照我的说法,工资表对应4个资源,resource表里面有4条记录,分别是增、删、改、查工资表。不知道我说的是否正确??为我解答了那么多,辛苦你了,结贴时为你追加分数