AySuite---权限值的实现

在说明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。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值