我正在构建一个像这样工作的权限系统:
DEFINE ('CAN_POST', 1);
DEFINE ('CAN_READ', 2);
DEFINE ('IS_GUEST', '');
DEFINE ('IS_USER', CAN_READ);
DEFINE ('IS_MODERATOR', CAN_READ | CAN_POST);
然后我有一个具有以下权限的当前用户:
DEFINE ('CURRENT', IS_MODERATOR);
我这样检查:
if (CURRENT & CAN_POST) print('CAN MAKE POSTS<br />');
if (CURRENT & CAN_READ) print('CAN READ STUFF<br />');
问题从这里开始:
我需要从数据库中获取当前用户权限,它当然是一个字符串。例如,我将在数据库中包含:IS_MODERATOR | CAN_REVIEW
,这意味着用户拥有IS_MODERATOR
拥有(CAN_READ, CAN_POST)
以及此CAN_REVIEW
的所有权限。
如何定义具有 CURRENT
的功能的IS_MODERATOR | CAN_REVIEW
常量,而不仅仅是一串字符串,这将不起作用。
答案 0 :(得分:2)
当然,这不是一个字符串,而是一个nubmer 只需将您的权利通常赋予两个权利,并将其作为每个人使用。
说,如果CAN_REVIEW = 4
,则IS_MODERATOR | CAN_REVIEW
将存储为7
您甚至可以在SQL查询中检查权限。
或者您可以解析检索到的值:
define('RIGHTS_CAN_REVIEW',4); //somewhere in config files
$rights = 7; //from database
define('CAN_REVIEW', (bool)$rights & RIGHTS_CAN_REVIEW);
现在'CAN_REVIEW'包含布尔TRUE
如果$rights
为1或2,则会FALSE