0

我正在构建一个这样工作的权限系统:

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

4

1 回答 1

2

当然,它不是一个字符串,而是一个数字。
只需将您的权利分配为两个通常的权力,并像每个人一样使用它。

说,如果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

于 2013-03-07T15:49:28.610 回答