权限管理

 两种方式哦:

  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。

posted @ 2016-12-13 20:39  风茗  阅读(267)  评论(0编辑  收藏  举报