Php 当您对二进制系统有很多权限时,该怎么办?

Php 当您对二进制系统有很多权限时,该怎么办?,php,permissions,binary,bit-manipulation,Php,Permissions,Binary,Bit Manipulation,我计划使用二进制系统来处理我的权限,如下所示: <?php const POST = 1; const DELETE = 2; const UPDATE = 4; const READ = 8; const ADMIN = 16; const ADD_PRODUCT = 32; const DELETE_PRODUCT = 64; const ADD_BLOG = 128; $permission = decbin('5'); if ($permission & POST)

我计划使用二进制系统来处理我的权限,如下所示:

<?php
const POST = 1;
const DELETE = 2;
const UPDATE = 4;
const READ = 8;
const ADMIN = 16;
const ADD_PRODUCT = 32;
const DELETE_PRODUCT = 64;
const ADD_BLOG = 128;


$permission = decbin('5');

if ($permission & POST) { echo "POST <br />"; }
if ($permission & DELETE) { echo "DELETE <br />"; }
if ($permission & UPDATE) { echo "UPDATE <br />"; }
if ($permission & READ) { echo "READ <br />"; }
if ($permission & ADMIN) { echo "ADMIN <br />"; }

?>

如果有一些权限,这将很好地工作。但是如果我有40种不同的权限呢?然后我需要把一些非常大的数字加起来,这真是个麻烦

还有别的办法吗

我们将非常感谢您提供的任何信息或帮助

1)使用十六进制来定义常量-更容易键入

2) 将单独的权限分解为不同的用户角色

e、 g

即使你得到了大量的数字,他们仍然很容易键入

const ADMIN_SOME_PERMISSION   = 0x1000;
const ADMIN_SOME_PERMISSION2  = 0x2000;

当你说“二进制系统”时,你实际上是在利用。如果你有40个权限,不要使用位掩码来存储它们,至少不要在代码中存储。当然,我会将它们存储在数据库中,这只是一个例子。对不起,我忘了提那件事。你能解释一下数据驱动的含义吗?@BlueCola如果你想与32位系统兼容,你实际上不能用整数位掩码存储超过32个权限。不过,您可以使用二进制字符串来执行此操作,这是存储数据的最小方式,但不可搜索。如果您只想使用其权限的位字段存储用户,只需使用位掩码方法即可。但假设我想找到所有拥有特定权限的用户——这将是一个非常缓慢的操作,因为数据库必须对每行执行逐位操作,而不是在特定列中查找值。使用Mysql查找可能比使用位标志查找更便宜,因此您可以拥有“权限”具有权限的表。但更好的是,研究一个ACL系统,在该系统中,用户被赋予了一个角色,并且该角色具有附加的权限—减少了重复,并且您不需要维护映射器表。
const ADMIN_SOME_PERMISSION   = 0x1000;
const ADMIN_SOME_PERMISSION2  = 0x2000;