• PHP使用位运算符控制权限


    位运算符在实际应用中可以做用户权限的应用

    我这里说到的权限管理办法是一个普遍采用的方法,主要是使用到”位运行符”操作,& 位与运算符、| 位或运行符。参与运算的如果是10进制数,则会被转换至2进制数参与运算,然后计算结果会再转换为10进制数输出。

    它的权限值是这样的

    2^0=1,相应2进数为”0001″(在这里^我表示成”次方”,即:2的0次方,下同)

    2^1=2,相应2进数为”0010″
    2^2=4,相应2进数为”0100″
    2^3=8,相应2进数为”1000″

    要判断一个数在某些数范围内就可以使用 & 运算符(数值从上面的表中得来)

    如:7=4|2|1 (你也可以简单理解成7=4+2+1)

    用 & 来操作,可以知道7&4、7&2、7&1都是真的,而如果7&8则是假的

    &、| 不熟悉的就要去查查手册,看看是怎么用的了

    下面来看例子吧:

    $perArr = array(
                'read' => 1<<0,//2^0
                'write' => 1<<1,//2^1
                'excute' => 1<<2,//2^2
                'delete' => 1<<3,//2^3
                'manage' => 1<<4,//2^4
            );
            $str = $perArr['read'] | $perArr['write'];// 3 = 1 + 2
            // echo $str |  $perArr['excute'];die;
            $manageMark = $perArr['read'] | $perArr['write'] | $perArr['excute'] | $perArr['delete'];
            $adminMark = $perArr['read'] | $perArr['write'] | $perArr['excute'] | $perArr['delete'] | $perArr['manage'];
            //总权限
            $mark = 0;
            foreach ($perArr as $m){
                $mark = $mark | $m;
            }
            echo $mark;//31//根据权限位 获取当前权限信息
            $arr = [];
            foreach ($perArr as $key=>$mark){
                if($manageMark & $mark){
                    $arr[] = $key;
                }
            }
         $arr = array(
          'read','write','excute','delete'
        );

    OK,权限分值的这其中一个算法就是这样的,可以说是简单高效。也不知大家明白没有,不明白也没关系,记住例子就行了。前提就是做好权限值的分布,即那个1、2、4、8、16….(这里还有个顺序问题,越高级的权限就要越高的权限值,比如上面的例子所演示的删除权限)。有了权限分布表就可以确定给某个人什么权限了,你简单的理解成要哪个权限就加上相应的权限值吧。

    这个方法很好用的,缺点就是如果权限分布得细的话,那么权限值会越来越大,你自己想想,2的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了。

    参考链接:https://www.php.cn/php-weizijiaocheng-369689.html

  • 相关阅读:
    14.5.5 Creating a File-Per-Table Tablespace Outside the Data Directory
    14.5.5 Creating a File-Per-Table Tablespace Outside the Data Directory
    php session 管理
    php session 管理
    CURD特性
    RabbitMQ学习总结(1)——基础概念详细介绍
    RabbitMQ学习总结(1)——基础概念详细介绍
    RabbitMQ学习总结(1)——基础概念详细介绍
    Java基础学习总结(39)——Log4j 1使用教程
    Java基础学习总结(39)——Log4j 1使用教程
  • 原文地址:https://www.cnblogs.com/guliang/p/12525319.html
Copyright © 2020-2023  润新知