`
ayhome
  • 浏览: 33704 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

AySuite---权限值的实现

    博客分类:
  • JAVA
阅读更多

在说明AySuite权限的实现之前先来看看角色权限控制系统(RBAC),相关的资料可以找到很多,这里不在重复。

提供几个参考 

http://www.javaedu.com/bbs/viewthread?thread=143

http://www.cnblogs.com/windinwing/archive/2007/11/11/956043.html (注意那个OR图例)


总而言之这就好比班级里面的班干部,班长、学习委员等职位可以看似角色,而班长对应的所有职能就是角色权限了,而班长其人就对应用户了。


在理解相关感念和比较后设计的角色权限表如下:ay_是表前缀;与application相关的字段暂且不管;


















下面举例 roles表的数据



然后对应 rolepermission 的数据有



对应module



譬如用户Demo 的ID为0 所属角色ID为2(即技术员),则相应对于模块 系统跟踪 的权限值为150

那么究竟权限值150包含了那些操作,下面我们就来说说权限值的算法。


AySuite权限值的算法

采用2的n次幂组成权限值的集合,如1、2、4、8、16...,某用户的权限值为其子集中的整数之和,如 7=1+2+4,5=1+4。如果要从数据库检索包含某几种权限的用户,则先把这几种权限值相加,假设和为k,然后select * from table where 1 and 用户权限值 = 'k';如果要判断某用户有哪些权限,则取出其权限值k,分别用k&1,K&2,K&4,k&16...,如果为真,则 表示有值等于“&”右边整数的权限,例如,如果k&4为真,则此用户有权限表中值等于4的权限;


系统中权限值对应的ACTION如

popedomType.put("Details", 2);		
popedomType.put("Create", 4);
popedomType.put("Edit", 8);
popedomType.put("Delete", 16);
popedomType.put("Orderby", 32);
popedomType.put("Print", 64);
popedomType.put("List", 128);
 不难算出150=128+16+4+2


module表中的 M_Directory字段和ACTION即可组合成一个URL 如

[BugTracker/edit]


然后把坚持当前用户权限的方法写到拦截器中即可实现RBAC。


 

分享到:
评论
1 楼 coffeesweet 2010-05-04  
权限值的这种&的判断方式很像一周工作计划和类似排班系统中的应用,很恰当,提醒了我,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics