Php 如何使用按位系统允许某些权限而不允许其他权限?

Php 如何使用按位系统允许某些权限而不允许其他权限?,php,bit-manipulation,acl,bitwise-operators,user-permissions,Php,Bit Manipulation,Acl,Bitwise Operators,User Permissions,我对编写一个类非常感兴趣,该类将帮助我为不同的用户提供不同的权限(即ACL类) 我一直在研究一个伟大的方法和位运算坚持 我发现了一篇好文章。本文介绍如何使用位操作处理权限 我唯一不确定该怎么做的是如何允许用户写评论而不是发布帖子 因此,如果权限设置为: <?php $perms = array( 'can_post' => 1, 'can_comment' => 2, 'can_edit' => 4,

我对编写一个类非常感兴趣,该类将帮助我为不同的用户提供不同的权限(即ACL类) 我一直在研究一个伟大的方法和位运算坚持

我发现了一篇好文章。本文介绍如何使用位操作处理权限

我唯一不确定该怎么做的是如何允许用户写评论而不是发布帖子

因此,如果权限设置为:

<?php

    $perms = array(
        'can_post' => 1,
        'can_comment' => 2,
        'can_edit' => 4,
        'can_delete' => 8
    );


   $user_perms = 2;    

//CONDITION #1
if ($user_perms & $perms['can_comment']) {
    /* He/She has permission to do this */
} else {
    /* He/She doesn't have permission */
}


//CONDITION #2
if ($user_perms & $perms['can_post']) {
    /* He/She has permission to do this */
} else {
    /* He/She doesn't have permission */
}

?>

因此,上面的
条件#1
显示工作正常,应该允许评论,但不应该允许
//条件#2
,因为用户没有发布的权限


我的问题是,如何允许用户只发表评论而不发表文章?若要发布,您将有“001”,若要发表评论,您将有“010”。

一旦您定义了
$perms
数组,您实际上可以从中创建自己的地图:

// can comment and post but not edit or delete:
$poster = $perms['can_post'] | $perms['can_comment'];

// can edit and delete, but not comment or post:
$janitor = $perms['can_delete'] | $perms['can_edit'];

您可以将任意数量的权限与
|
运算符组合以生成权限值。

这适用于十进制数还是仅适用于二进制数?我看不到上面有任何二进制操作?@andrebruton只有当每个权限是2的幂时,它才会起作用。也就是说,你可以有一些聪明,比如说
$perms['general_posting']=3
具有自动激活多个基本权限标志的权限。