后台权限控制思路(结合二进制数)

1.后台每个路由定义一个菜单(包含操作(权限):列表,新增,编辑,删除,导出,审核。。。)
将其与二进制数一一相对:
{
1:'list',
2:'add',
4:'edit',
8:'delete',
16:'export',
32:'check',
}
给用户分配的权限即是 数字相加
例如: admin/user 管理员管理。
给一个用户分配 list和edit和export = 1 + 4 + 16 = 21

看一下二进制和十进制的转换
{
1: 0000 0001,
2: 0000 0010,
4: 0000 0100,
8: 0000 1000,
16:0001 0000,
32:0010 0000,
}
可以看出 每个权限可以用对应的数字1所在的位置来表示:即是 从右边最低位开始,第一位是list ,第二位是 add ...

21 = 2^4 + 2^2 + 2^0

所以 21 = 0001 0101  可以看出来 有 list   edit  以及 export的权限

所以判断权限时: 举例
1.进制转换
21(10) = 0001 0101(2)
2. 例如判断 export  对应的 是 16   = 2^4   ,
将0001 0101(2)转换为数组  [0,0,0,1,0,1,0,1]
数组反转: [1,0,1,0,1,0,0,0]
找到数组下标为4的=1 则判断该用户有该权限
示例代码(十进制数可以直接简化为数组下标)
<?php


//{
//1:'list',
//2:'add',
//4:'edit',
//8:'delete',
//16:'export',
//32:'check',
//}
//{
//1: 0000 0001,
//2: 0000 0010,
//4: 0000 0100,
//8: 0000 1000,
//16:0001 0000,
//32:0010 0000,
//}
const PERMISSIONS =
[
    'list' => 0,
    'add' => 1,
    'edit' => 2,
    'delete' => 3,
    'export' => 4,
];

$method = 'user/export';

$my_permission['user'] = 9;

$array = explode("/", $method);

$permission = end($array);

$bin = decbin($my_permission['user'] . "");

if(strlen($bin) < 8){
    //前面补0
    $zero_number = 8 - strlen($bin);
    for ($i=0;$i<$zero_number;$i++){
        $bin = '0'.$bin;
    }
}

/*print_r($bin);
print_r('-----------');
print_r(strlen($bin)-PERMISSIONS[$permission]-1);
print_r('-----------');*/
//直接按字符串取下标
print_r(substr(($bin), strlen($bin)-PERMISSIONS[$permission]-1, 1));

?>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值