• php通过为运算符实现会员权限


     

     php实现会员权限

    1,如上图可以看出  2的0次方1 , 2的1次方2 ,2的2次方4 , 2的3次方8 ……
    旁边的
    1转换成二进制是1
    2转换成二进制是10
    4转换成二进制是100
    8转换成二进制是1000

    也就是说 2的n次方 后面对于的  二进制就是 n位数,后面加零就可以了

    2、利用PHP位运算二进制实现权限控制


    在PHP中要判断一个数在某些数范围内就可以使用 & 运算符。

    & 是位运算,不是 && 逻辑运算 (位运算符:&  |  ^  ~)

    例如:7=4|2|1   ===》   $sy = 4|2|1  意思是 $sy里面 可以包含 4 可以包含2 可以包含1

    这里的或是指的可以能包含的内容值,在位运算里其实可以简单理解成 7=4+2+1,

    用 & 来操作,可以知道7&4、7&2、7&1都是真的,而如果7&8则是假的。
    (意思就是说7里面包含4也包含2也包含1 但是不包含8, 因为7可以看作是 1+2+4得成的)

    我们还可以用^ 来从包含的值内去除:如 $ny = $sy ^ 2  (这里是把2给去除了,再赋值给$ny所以$ny里面只剩下4和1)

    这样一来,$ny 只有 4|1 如果做判断也就只有 $ny&4、$ny&1

    3、利用PHP位运算二进制实现权限控制

      define("ADD", 1);//添加
      define("UPD", 2);//编辑
      define("LIS", 4);//读取
      define("DEL", 8);//删除
     
      //通过位或运算赋值给$all_full   如果 echo $all_full 将输出 15
      $all_full  =  ADD | DEL | UPD | REA;  表示这个用户组 拥有所有权限
     
      $all_sub = LIS | ADD | DEL;

    echo decbin($all_full); //将输出 "1111" 也就是 4个1

    $ny = $all_full^ UPD; //这里意思也就是把 2 去除,那么这里$ny 将不包含2

    echo decbin($ny); //将输出 "1101" 也就是第三位 为假 因为不包含第三位 2

    $ny = $all_full^ (UPD|ADD); //这里意思也就是把 2和1 去除,那么这里$ny 将不包含2和1

    echo decbin($ny); //将输出 "1100" 也就是第三四位 为假 因为不包含第三四位  为什么结果会倒过来呢,因为是倒系的,大的排在前面

    可以看出decbin() 函数的作用,顺序是倒过来的,不包含哪位哪位就为0 否则为1



    4,从上面可以看出 最有一个权限字段存储 整形数组,比如存贮 15  意思就是  1+2+4+8
    如果要判断一下 有没有 2 这个权限 可以  15&2 运算一下
    如果保存 值为 3 按上面的数组来算的话, 就是只包含  添加 编辑权限
    以下是 实例代码
    //echo 15 & 1  将输出 1 , echo 15 & 4  将输出 4  , echo 15 & 8 将输出 0,这表明包含谁则返回谁,否则返回0 
    if($user_shell & ADD )
        echo '有添加权限';
    else
        echo '没有权限';
       
    $user_shell  为上面表中数据库 读取出来的值,为15  以上输出     "有添加权限"

  • 相关阅读:
    ORM框架
    js获取浏览器和元素对象的尺寸
    js中的兼容问题
    JS页面上的流氓广告功能
    JS计算1到10的每一个数字的阶乘之和
    JS中 有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量
    JS中99乘法表
    JS 中计算 1
    JS中判断一个数是否为质数
    JS水仙花数
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2736863.html
Copyright © 2020-2023  润新知