Как я мог бы изменить свою систему входа пользователя на многоуровневый ‘ed login

#php

#php

Вопрос:

В настоящее время у меня есть простой раздел входа администратора на мой веб-сайт, из которого администратор может добавлять / редактировать содержимое страницы, добавлять / редактировать страницы или темы. Теперь я обдумываю дальнейшую работу в этом проекте, чтобы этот сайт работал так, как это необходимо. Мне нужно добавить многоуровневую систему пользователей, я думаю, что добавление пользовательского уровня в качестве INT к моим наборам таблиц позволило бы это, тогда на моих страницах, где у меня есть вызов моей "is_logged_in" функции, я мог бы также вызвать пользовательский уровень INT и сохранить его в сеансе. Таким образом, если для пользователя установлен уровень 1 показывать ссылки a , если для пользователя установлен уровень 2 показывать ссылки b . или я смотрю на это неправильно?

Комментарии:

1. Нет, выглядит отлично. Дерзайте.

2. Идите еще глубже и используйте массивы для хранения разрешений, чтобы вы могли создать более детализированную систему разрешений.

3. Ваше решение подойдет, если оно соответствует вашим потребностям. В какой-то момент вы можете захотеть переключиться с «уровней» на что-то более гибкое, такое как «роли» или «разрешения» и т.д. Но нет смысла создавать что-то, что вы еще не используете (см. YAGNI ).

4. да, хорошо, я только что немного прочитал ваш комментарий @YAGNI, и да, это дало мне немного пищи для размышлений, может быть, в какой-то момент вы захотите присоединиться ко мне, и мы сможем посмотреть, над чем я работаю и что у меня уже есть

Ответ №1:

Не нужно изобретать велосипед. То, что вы ищете, называется функциональностью списка управления доступом (ACL). Существует множество доступных решений, которые вы можете включить в свой проект. Лично я использую библиотеки Acl от Zend, но есть еще много вариантов.

Как это работает (базовая версия): вы назначаете некоторые роли ACL — например, «администратор», «персонал», «пользователь», «гость», где «гость» будет вашим анонимным посетителем по умолчанию. Когда пользователь входит в систему, вы сохраняете роль ACL в сеансе пользователя.

Затем вы создаете класс ACL, который назначает эти роли вашим ресурсам. Например. «admin» может читать и редактировать любые данные, «staff» может читать данные «admin», «staff» и «user», но редактировать только свои собственные данные и данные «user», «user» может читать другие данные «user», но редактировать только свои собственные данные.

В любой момент вашего приложения, где вам нужно проверить, разрешено ли пользователю выполнять какое-либо действие или получать доступ к определенным разделам веб-сайта (например, CMS), вы проверяете свои правила ACL, чтобы выполнить действие / разрешить доступ или сообщить пользователю, что он / она не авторизован.