Комментарии Пекки о взгляде на Zend API хороши. Многие из фреймворков для PHP в настоящее время (к сожалению) плохо реализованы как мусор (с ужасно любительским кодом внизу), но API Zend практически уникальны.
Если вы сделаете свой собственный бросок, в этом нет ничего плохого, если вы не можете найти то, что соответствует вашему желанию (и не может быть легко расширено), тогда я бы использовал подход OO и выставил бы пользователя свойства через класс.
например.
$user = new User($session->userId);
if (!$user->isAdministrator && !$user->canViewReports)
someErrorHandler("You do not have permission to access this content.");
Я бы избегал фиксированных уровней, но вместо этого следовал бы подходу, основанному на ролях.
т.е. Я бы избегал таких уровней, как:
- Персонал
- Менеджер
- Администратор
И вместо этого я бы пошел на свойства (так же, как иллюстративные примеры):
- read_access
- write_access
- can_view_logs
- can_view_reports
- is_administrator
Это позволяет вам быть более понятным позже, когда вы (неизбежно) обнаружите, что вам нужна дополнительная группа разрешений, которую вы хотите вернуть и изменить существующий код.
Это не означает, что помещать пользователей в группы - плохая идея (это не так, и вы могли бы реализовать это, используя систему групп, например, где пользователь мог бы находиться как в «Отчетах», так и в «Журналах»), но предположения о Иерархические уровни безопасности, как правило, являются неправильным подходом (например, Уровень 1 = Персонал, Уровень 2 = Менеджеры, Уровень 3 = Администратор) - это потому, что вам почти всегда нужна система, более гибкая, чем позволяет простая иерархическая система.
На практике, если вы в конечном итоге выберете этот подход, вы можете захотеть иметь класс Permissions или Group, чтобы избежать чрезмерно большого класса User (который может закончиться полным набором вещей для получения пользовательских свойств, установки новых паролей, и т.д.).
* * +1039 например,
$group = new Group($session->userId);
if (!$group->Administrators && !$group->Reporting)
someErrorHandler("You do not have permission to access this content.");