zoukankan      html  css  js  c++  java
  • php使用位与运算符【&】或【|】实现权限管理

    权限值是这样的
    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则是假的

    例子:
    <?php
    // 定义权限
    define("mHIGHT", 16);// 更高的权限,2的4次方
    define("mDELETE", 8);// 删除的权限,2的3次方
    define("mUPLOAD", 4);// 上传的权限,2的2次方
    define("mWRITE", 2);// 写入的权限,2的1次方
    define("mREAD", 1);// 只读,2的0次方

    // 赋值给权限
    echo mDELETE|mUPLOAD|mWRITE|mREAD;

    if(19 & 16)
    echo '有更高的权限<br>';

    // 判断权限用&【位与符】,假设权限值$key
    $key = 13;//13=8+4+1
    if($key & mDELETE)
    echo '有删除权限<br>';

    if($key & mUPLOAD)
    echo '有上传权限<br>';

    if($key & mWRITE)
    echo '有写入权限<br>';

    if($key & mREAD)
    echo '有只读权限<br>';

    $key = 13;//13=8+4+1
    if($key & 8)
    echo '有删除权限<br>';

    if($key & 4)
    echo '有上传权限<br>';

    if($key & 2)
    echo '有写入权限<br>';

    if($key & 1)
    echo '有只读权限<br>';

    ?>


    权限分值的这其中一个算法就是这样的,可以说是简单高效。也不知大家明白没有,不明白也没关系,记住例子就行了。前提就是做好权限值的分布,即那 个1、2、4、8、16….(这里还有个顺序问题,越高级的权限就要越高的权限值,比如上面的例子所演示的删除权限)。有了权限分布表就可以确定给某个人 什么权限了,你简单的理解成要哪个权限就加上相应的权限值吧。
    这个方法很好用的,缺点就是如果权限分布得细的话,那么权限值会越来越大,你自己想想,2的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了

  • 相关阅读:
    find ./ -type d ! -name "."
    Linux入门-进程、计划任务
    Linux入门-用户管理
    Linux入门-shell使用技巧
    Linux入门-压缩、解压
    Linux入门-常用命令
    MySQL杂项(索引注意事项 快速导入导出数据 锁 字符集 慢查询)
    MySQL分区实验
    Lvs网络负载均衡 直接路由(dr)
    Lvs网络负载均衡 隧道(ip tunl)
  • 原文地址:https://www.cnblogs.com/zqifa/p/php-18.html
Copyright © 2011-2022 走看看