Во-первых, давайте проясним некоторые термины: я лично использую термин security для таких вещей, как предотвращение SQL-инъекций, XSS-атаки, где мы должны проверять ввод, фильтровать / дезинфицировать значения, заботиться о динамическисгенерированные команды SQL, позаботьтесь о правильном экранировании вывода (для текста в формате JSON или HTML или атрибутов HTML) и т. д. Это , а не о том, что вы спрашиваете, если я правильно понял.
контроль доступа или права доступа * Система 1010 * - это то, где вы предоставляете или запрещаете доступ к функции для пользователя.Это может быть безопасно или нет.Я понимаю, что запретить пользователю, который не имеет разрешения на доступ к функции, может звучать как «безопасность», но я бы не использовал это конкретное слово в этом контексте, чтобы избежать путаницы.
Теперьответ:
Я настоятельно рекомендую вам создать несколько базовых классов контроллеров для ваших нужд.Внимательно прочитайте следующее сообщение в блоге (оно короткое и полезное): http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY
Код, проверяющий правильность аутентификации пользователя (вошедшего в систему), имеет важное значение.Если пользователь не вошел в систему, перенаправьте на домашнюю страницу или на страницу входа.
Для детального контроля вы можете создать свой ACL в базе данных, используя таблицу users
, плюс таблицу actions
,плюс таблица acl
...
Таблица users
будет содержать данные пользователей (идентификатор, имя, логин, пароль и т. д.)
Таблица actions
будет содержатьполе id и, по крайней мере, еще одно поле, содержащее то, что лучше всего подходит для вашего приложения: это может быть только имя класса контроллера (первая часть URL, например: «products»), предоставление доступа ко всему контроллеру «products» илине.Или вы можете захотеть включить как класс контроллера, так и имя метода (первую и вторую части URL, например: «products / add» и «products / delete») и т. Д.
Определиться с таблицей actions
- самый решающий шаг.Подумайте об этом очень хорошо, сбалансируйте ваши потребности (ваши «истинные» потребности) ... Я разработал систему, в которой каждое действие имеет свою запись.Это хорошо, но для поддержания необходимо работа .
Очень полезный столбец для таблицы actions
- это удобочитаемое описание действия.
Тогда acl
будет представлять собой не что иное, как столбец для идентификатора пользователя и другой столбец для идентификатора действия.
Поле доступа «master» для предоставления / запрета в users
Таблица также полезна, если вы хотите временно запретить доступ определенному пользователю, без необходимости удалять все его разрешения и, возможно, позже восстанавливать его.
С таблицами базы данных и вашим «контроллером / методом»или стратегия «действий» четко определена, вы можете легко закодировать в своем базовом классе контроллера функцию, которая проверяет, есть ли у пользователя разрешение на выполнение запрошенного действия.
Это базовая функция.В моей системе у меня есть интерфейс администрирования пользователей, где я могу предоставлять / запрещать действия для каждого пользователя (я использую дерево ExtJS с флажками).Одним из этих действий является собственное управление пользователями.Я пошел еще дальше, когда пользователь, который может получить доступ к управлению пользователями, может «делегировать» (предоставлять / запрещать) другим пользователям только те действия, к которым он сам имеет доступ.
Система имеет несколько модулей, ифункции.Интерфейс не показывает ничего, к чему у пользователя нет доступа.Итак, у меня есть пользователи, которые могут видеть только один или несколько модулей, и они даже не представляют существование других модулей.
Требуется больше работы для управления всем этим, но результат стоит.
Я также log каждому предоставлен доступ, поэтому можно отслеживать, кто что сделал и когда.Эту функцию журнала очень легко добавить, поскольку у вас есть «основная функция» базового контроллера, позволяющая или запрещающая пользователям выполнять действия.
Надеюсь, я помог.Я только что рассказал о том, что сработало (и работает) для меня ...