OA之权限管理
来源:互联网 发布:origin作图软件 编辑:程序博客网 时间:2024/05/17 03:16
权限管理自己做完了,但是很多的研究和总结,现在就来总结一下权限管理。
第一、数据库中主要类:
主要负责类:用户(User),角色(Role)、资源(module)和操作(Permission)
衍生类:用户角色(UserRole)和对某个资源的某个操作(ACL)
第二、ACL的具体理解:
一条acl授权记录中主要记录了以下信息: 角色、资源和授权
授权作为一个int, 每一位是一个操作的权限.
假设从右向左, 分别代表CRUD
那么, 我们CRUD的代码就应该是0123(也就是移位时要移的位数), 因为我们要进行移位进行认证。
先看授权与取消授权的代码:
public void setPermission(int permission,boolean yes){int temp = 1;temp = temp << permission;if(yes){aclState |= temp;}else{aclState &= ~temp;}}
首先, 一个int temp = 1的临时变量, aclState为原始授权状态tmp的二进制表示是: 00000000 00000000 00000000 00000001
U对应的代码是U, 对应的是2.
将tmp左移2位, temp = tmp < < 2; temp变成:00000000 00000000 00000000 00000100
假设原始授权是aclState=00000000 00000000 00000000 00001010
当变量yes=true时,为授权,将temp与aclState求|运算,因为temp现在只有他要授权的位为1,求或运算后,
aclState=00000000 00000000 00000000 00001110,这样就授权成功
当变量yes=false时,为取消授权,先将temp取反,即为11111111 11111111 11111111 11111011,
现在只有要取消权限的位为0,其余全为1,然后与aclState求&运算,则除了要取消权限的位变0,其余的都不变,
即aclState=00000000 00000000 00000000 00001010
再来看认证:
public int getPermission(int permission){ int temp = 1;temp = temp << permission;temp &= aclState;if(temp != 0){return ACL_YES;}return ACL_NO;}
认证更简单,直接将temp变量与aclState求&,temp为1的位为要验证的权限,其余全为0,如果aclState的这一位为1,则结果不为零,即有该权限;若aclState这一位为0,即没权限,则结果为0,没有该操作权限
总结:权限管理最难理解的就是CRUD中的数据得来,至于别的我们可以关系,我们还是可以清晰的理解,还有一个概念就是集成的概念:
a) 针对某个资源的所有操作,我们可以设置这些权限对用户来说是“继承”或“不继承”
i. 继承:意思是这些权限将使用其(即用户)所拥有的角色的权限,而不使用其(即用户)单独设置的权限
ii. 不继承:意思是这些权限将使用其单独设置的权限,而不使用其所拥有的角色的权限
- OA之权限管理
- OA系统之权限管理设计方案
- OA之权限管理需求总结
- 然之OA权限管理思路分析
- OA权限管理
- OA权限管理
- oa权限管理
- 3、OA权限管理
- OA权限管理
- OA系统权限管理设计方案
- OA系统权限管理设计方案
- OA系统权限管理设计方案
- OA系统权限管理设计方案
- OA系统权限管理设计方案
- OA系统权限管理设计方案
- OA系统权限管理设计方案
- OA办公自动化权限管理思路
- OA系统权限管理设计方案
- linux下使用qq2012的方法
- php显示xml
- CSDN高校俱乐部会员活动之C语言系列培训会
- matlab排序
- WINCE6.0物理地址和虚拟地址的换算
- OA之权限管理
- Linux下Vi/Vim的使用方法
- c语言例题之数组
- SOJ4224 Divide
- android 4.2 环境搭建
- 必看外国电影一百部,中国电影五十部
- Java堆内存的10个要点
- 2011山东大学(威海)CSDN高校俱乐部期末会员大会
- vmware 三种联网方式区别