两种方式哦:
1.基于表查询做判断
2.用按位与运算做判断
权限管理:
1.角色编号一定是大于功能编号的,因为它就是由功能编号加得来的。
2.角色编号怎么来的? 给角色授权的时候生成的哦! 所以看角色授权啊! 哦哦哦
功能编号: 按2进制升幂来编
权限管理最终是为了鉴权,判断一个用户是否拥有访问和操作某一项功能的权利。
角色的编号: 二进制? 1 2 4 ......(也是和功能一样,提前设置好的?)
用户的角色编号: 是由给用户添加角色的时候设置的! 哦哦! 明白。
4个编号
用户的角色编号 给用户分角色的时候设置的。
角色的角色编号 自己设置好的 1 2 4 8 .......
角色的功能编号 给角色添加权限的时候设置的。
功能的功能编号 自己设置好的 1 2 4 8 .......
博客总结: 哦,原来如此: 逻辑判断: 解决问题,实例化,化抽象为具体! 按位于:就应该想到是位运算,就应该想到二进制。 就应该想到1代表有权限。
用户表:用户角色编号
角色表:角色编号 角色功能组编号
功能表:功能编号
A: 用户和角色靠什么关联起来呢?
答:用户的角色编号《————》角色的角色编号相关联。
B: 角色和功能靠什么关联起来呢?
答:角色表的功能组编号《————》功能表的功能编号。
C:角色表的roleValue是二进制的哦! 角色编号: 1 2 4 ...
功能表的功能编号是二进制的哦! 功能编号: 1 2 4 8 16 .......
D: 嗯,知道了功能编号和角色编号是以二进制来设置初值的。
但用户的角色编号是如何设置的呢? 1,3,5,7
还有角色功能组编号?
四个编号建立了权限管理哦! 哈哈!
E: 规律,只要a大于等于b,那么a按位与b的结果一定是b! (前提是初值的设置哦) 是吗?
F:什么叫权限? 某一用户是否拥有操作某一功能的权利! 给用户权利:授权 (取消权利) 但结合实际生活,存在相同权利的用户哦!
1. 给角色添加功能: (二进制哦,1代表有权限,0代表没权限)
如果角色编号和功能编号按位与后,结果等于功能编号,则设置角色编号的值不变。(角色有此功能)
否则,设置角色编号为当前的角色编号 + 功能编号。 (角色无此功能,那么就添加功能)
更新角色domain!
2. 给角色取消功能:
角色编号与功能编号按位与运算,如果结果为0,说明角色无此权限,所以角色编号不变。(角色无此功能)
否则角色编号要减去功能编号哦! (角色有此共嗯那个,那么就撤销功能)
更新角色domain!
3. 给用户添加角色 给用户撤销角色 (二进制哦,1代表有权限,0代表没权限)
如果用户的角色编号和角色的角色编号按位与后,结果等于0,说明用户不拥有此角色组的所有权限哦! 此时加!
如果用户的角色编号和角色的角色编号按位与后,结果等于角色编号,说明用户拥有此角色的所有权限哦! 此时减。
是啊,角色分组的时候,用户有,就只有撤销的份哦,用户没有,才有添加角色的份哦!
之前的草稿 (下面)
一:理解鉴权 用位运算实现权限控制
位运算,就是将10进制数转换成2进数,在进行操作的运算。
最大只能有32个操作权限, 有权限为1,没权限为0。
A:给角色授权: 某一角色有哪些权限!
根据id查询角色,角色编号和权限编号进行(按位与)运算!
所得结果如果 == 权限编号? 是{角色编号} 否{角色编号 + 功能编号}
重置角色编号!!!!!!!!!!
B:为用户分配角色、撤销角色: 将用户分配到角色!(管理组、审核组)
就是加减角色表的value编号值哦!
分配:减! 撤销: 加!
用户表的角色编号和角色表的角色编号是关联的哦!
授权: 将权限授予给定角色
改变角色的角色编号来实现的。
描述:角色编号和功能编号进行按位与运算, 结果等于功能编号?
如果等于,设置角色编号为功能编号,否则,设置角色编号为当前角色编号 + 功能编号。
1.角色编号为0,功能编号任意,按位与后结果为0,不等于功能编号,
所以设置角色编号为 0 + 功能编号 = 功能编号。
鉴权:
没看到往UserDetails添加功能编号啊, 方法切面拦截。
方法执行前,比对方法对应的功能编号 与用户权限编号数组 比对,如果有说明有权限!
那么授权的时候一定是将权限编号添加到角色了哦! 什么时候添加的呢?
用户分配到角色:
用户的角色编号和角色编号按位与运算,如果等于0
设置用户的角色编号为:当前用户的角色编号 + 角色编号
用户撤销角色:
用户的角色编号和角色编号按位与运算,如果等于角色编号
设置用户的角色编号为:当前用户的角色编号 - 角色编号, 如果结果小于0,就设置角色编号为1。