2013-03-07 78 views
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 />'); 

一个问题 b这里egins:

我需要从数据库中获取当前用户权限,它当然是一个字符串。例如,我将在数据库中包含如下内容:IS_MODERATOR | CAN_REVIEW这意味着用户具有IS_MODERATOR具有(CAN_READ, CAN_POST)的所有权限,并且除CAN_REVIEW之外。

我如何定义CURRENT不变,将有IS_MODERATOR | CAN_REVIEW不只是它的字符串,将无法正常工作的功能。

+2

'这是当然是一个字符串当然你错了。它将是一个nubmer。说,CAN_READ | CAN_POST将表示为3 – 2013-03-07 15:41:44

+0

谢谢,但我不明白,对不起。 '$ res =“IS_MODERATOR”; DEFINE('CURRENT',$ res); print(CURRENT);'给我一个字符串'IS_MODERATOR'。不是一个数字。 – Davit 2013-03-07 15:48:33

回答

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