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

もちろん、それは弦ではなく、ナブマーになります。
あなたの権利に通常の2の累乗を割り当てて、それを全員として使用するだけです。

たとえば、の場合CAN_REVIEW = 4IS_MODERATOR | CAN_REVIEW7として保存されます

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
$rights1または2の場合)。FALSE

于 2013-03-07T15:49:28.610 に答える