权限管理系统中二进制的运用

参考转载自:https://www.cnblogs.com/zhaord/articles/4839877.html

二进制的权限管理基本运用到二进制的位运算

位运算的内容:

 或(|)运算的内容有:  1|1 =1 、1|0=1  、0|1=1、0|0=0. 通过或运算可以看出,只要有一个数位为1,那么所求结果就为1.

       与(&)运算的内容有: 1&1 =1 、1&0=0、0&1=0、0&0=0,通过与运算可以看出,只要有一数为0,那么所求结果就为0.

       求补(~)运算的内容有  ~1=0、~0=1,求补运算表面上看起来就是 1和0倒转过来。

我们假设采用8位二进制代表具体的权限集合具体关系如下:

      |  下载   |  打印   |  查看   |  审核    |  详细  |  删除  |   编辑  |   创建 |

      |     0     |     0     |     0     |     0      |     0    |    0     |      0    |     0    |

如果某位为0,这表示没有改操作权限,如果为1,这表示具有该操作权限,比如: 0000 0001 表示只有创建权限、00100011这表示有创建、编辑、查看着三种操作权限,依次类推。

       如果用一个整数来代表一个操作权限的话,那么

       创建=1、编辑=2、删除=4、详细=8、审核=16、查看=32、打印=64、下载=128、全部=255(前面所有内容相加)、无=0。

       那么数字3(00000011)则表示有创建和编辑的权限,13(00001101)折表示有详细、创建、编辑这三种操作权限。

1、授权操作

如果一个功能已经有了 创建和编辑的权限,二进制就是 0000 0011 ,这么现在要添加一个查看(0010 0000)权限,授权之后的权限的二进制就为(0010 0011),通过2.1的内容可知,当

    0000 0011

|  0010 0000

-----------------

    0010 0011,

这样就通过了或运算添加给原有的权限添加一个新的权限

2、取消授权操作

  如果一个功能已经有了查看、创建、编辑的权限,二进制就是 0010 0011 ,现在要求要取消编辑的权限,取消授权之后的二进制就是: 0010 0001 ,整个内容看起来就是对编辑位进行求反运算,那么我们先看编辑权限的求补运算的结果: 

~ 0000 0010

----------------

    1111 1101 ,

那么求补的结果在和原有权限进行和运算 

    (0010 0011)

& (1111 1101)

-----------------

    (0010 0001) ,

这样就得到了取消之后的二进制 0010 0001(17)

3、权限判断

现在要判断 0011 1100 这个代表的权限操作中,有没有审核权限(0001 0000),那么我们对这两个权限进行 与运算 

(0011 1100)

& (0001 0000)

-------------------------

        (0001 0000),

判断有没有创建权限(0000 0001),

         (0011 1100)

     & (0000 0001)

--------------------------

         0000 0000,

也就是说,两个权限进行与运算,如果与运算的结果为0,则表示无该操作,反正,则表示具有该操作。

总结:

权限操作基本分3部分  授权、取消授权与权限判断 

猜你喜欢

转载自blog.csdn.net/u012525295/article/details/83791552