• 权限管理


     两种方式哦:

      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。

  • 相关阅读:
    codeforces 1343D(差分+思维)
    codeforces 1305C(鸽巢原理+同余)
    aa
    codeforces 1325D 位运算+思维
    Codeforces 1312D 组合数学
    Codeforces 1284C 组合数学
    Codeforces 1296C(map)
    CodeForces 1271B(思维)
    CodeForces 1281B(思维+暴力)
    HDU 1506(单调栈)
  • 原文地址:https://www.cnblogs.com/njqa/p/6171425.html
Copyright © 2020-2023  润新知