Некоторые идеи при планировании системы php - PullRequest
0 голосов
/ 27 января 2010

Я только собираюсь приступить к созданию относительно большой системы PHP, мне просто нужно несколько идей о том, как реализовать определенную функцию.

Я разрешу пользователям регистрироваться. После регистрации пользователь будет иметь уровень безопасности, который будет присвоен его учетной записи.

Итак, если бы у меня были уровни безопасности 1, 2 и 3, какой был бы лучший способ показать определенные вещи людям с определенными уровнями безопасности?

Спасибо заранее.

Ответы [ 2 ]

4 голосов
/ 27 января 2010

Прежде чем изобретать велосипед, убедитесь, что Zend_ACL для вас Я не использовал его сам, но из того, что он обещает в документах, он может делать то, что вам нужно, и многое другое.

3 голосов
/ 27 января 2010

Комментарии Пекки о взгляде на 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.");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...