Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 反向工程位掩码以获取权限列表_Php_Bit Manipulation - Fatal编程技术网

Php 反向工程位掩码以获取权限列表

Php 反向工程位掩码以获取权限列表,php,bit-manipulation,Php,Bit Manipulation,我正在使用位掩码表示的权限。这些权限是 $permissionMap = [ 'VIEW' => 1; 'CREATE' => 2; 'EDIT' => 4; 'DELETE' => 8 'UNDELETE' => 16; 'OPERATOR' => 32; 'MASTER' => 64; 'OWNER'

我正在使用位掩码表示的权限。这些权限是

$permissionMap = [
    'VIEW'     => 1;
    'CREATE'   => 2;
    'EDIT'     => 4;
    'DELETE'   => 8
    'UNDELETE' => 16;         
    'OPERATOR' => 32;         
    'MASTER'   => 64;         
    'OWNER'    => 128;
];       
如果我组合了多个权限,比如
查看
编辑
、和
删除
,以获得13的位掩码。是否可以对该整数进行反向工程,以了解用于创建该整数的权限

function getPermissions($mask, $permissionMap) {
    // use $permissionMap to return string[] 
}

$viewEditAndDelete = 1 | 4 | 8; // 13

getPermissions($viewEditAndDelete, $permissionMap); // ['VIEW', 'EDIT', 'DELETE']

只需检查是否设置了特定的掩码。实际上,如果我们遍历
$map
并检查其标志是否已设置,这非常简单:

function getPermissions($mask, $permissionMap) {
    $permissions = [];
    foreach( $permissionMap as $perm => $val )
        if( $mask & $val )
            array_push( $permissions, $perm );
    return $permissions;
}

另一方面,在创建
$permissionMap
数组时,应该使用
作为分隔符,而不是
(并且在
'DELETE'=>8
之后缺少分隔符)。