Я создал один, используя систему разрешений "* NIX-type".
У меня есть другой тип разрешений для страницы (чтение, изменение, удаление, комментирование, голосование), и я назначаю бит каждому из них.
Так, например, у меня есть
define ('USER_CANREAD', 1);
define ('USER_CANMODIFY', 2);
define ('USER_CANDELETE', 4);
define ('USER_CANINSERT', 8);
define ('USER_CANCOMMENT', 16);
define ('USER_CANVOTE', 32);
Тогда, если пользователь может читать, комментировать и голосовать, разрешение будет 1 + 16 + 32 = 49
Для проверки разрешений я просто делаю побитовое И с этими значениями.
Например, user->permissions & USER_CANDELETE
, чтобы проверить, может ли пользователь удалить страницу (очевидно, у меня есть функция canDelete
для этого)