Когда я сделал свою первую админку, возник вопрос, как бы ее закрыть от злых людей. Подозревая, что просто придумать необычный адрес — мало, я стал искать решения.
Нашлось два распространенных варианта:
* закрыть доступ к папке с администраторскими скриптами средствами Apache с помощью .htaccess и .htpasswd,
* воспользоваться PHP-сессиями и хранением пароля в базе данных.
Альтернатива с .htaccess показалась проще, к тому же у хостера был веб-интерфейс для ограничения доступа к папкам.
Плюс варианта с базовыми средствами Apache? Приемлемый уровень надежности с минимальными временными затратами.
Потом я постепенно стал знакомиться с разным web based ПО, и первое время с удивлением отмечал, что множество разработчиков пользуется сложными схемами с PHP-сессиями. Понемногу я стал понимать, в чем дело.
Очевидное преимущество — сравнительное удобство управления правами доступа при большом количестве пользователей системы. Если хранить все данные в таблице базы данных, можно раздавать пользователям привилегии, основываясь на группах. Можно придумать хитрый механизм восстановления забытого пароля. При этом список пользователей нужен и для решения основных задач.
Теперь неочевидное преимущество. При организации управления контентом сайта со сложной структурой при выборе варианта с .htaccess всю эту структуру придется повторить в админке. И, скорее всего, это будет выглядеть как-то по-другому, нежели копирование страниц сайта с добавлением ссылок на редактирование и удаление.
Когда администраторский раздел закрывается средствами языка, ссылки на добавление новых записей, редактирование и удаление существующих можно вписать в сайт, ничего не дублируя.
Если на страницу заходит привилегированный пользователь, то под каждым информационным блоком ему можно показывать ссылки на управление содержимым. Увидел опечатку в описании товара, кликнул по ссылке «Редактировать», тут же исправил и вернулся на страницу с описанием.
При использовании .htaccess процесс будет выглядеть по-другому: администратор увидел опечатку, создал в браузере новую вкладку, там загрузил администраторскую панель, нашел там товар, отредактировал, вернулся на первую вкладку и посмотрел, всё ли теперь в порядке.
С точки зрения безопасности оба варианта вполне приемлемы.
Резюме
Если структура сайта простая, администраторов мало — меньше проблем доставит вариант с .htaccess.
Если структура сложная, то чтобы не повторять ее в панели управления, а также администратору не совершать лишние движения по поиску редактируемого содержимого, лучше пользоваться PHP-сессиями, и внедрять ссылки на страницы сайта.
Дмитрий Сергеев, 22 года. Разрабатываю сайты на Drupal.
Mr. Mishin Oleg, 28.02.2007 11:50
Редактирование данных на внешней (читай - публичной) части сайта возможно, но в ограниченных количествах. Допустим вместо удаления какйо-то информации с сайта через внешнюю часть достаточно поставить ссылку "Скрыть с сайта". Это убьет двух зайцев: позволит давать доступ не самым опытным модераторам и защитит данные от стирания. Информация скрыта = сайт приведен в должный вид, но всегда можно все вернуть на круги своя.
А внутри, особенно на сложных проектах, представление принципиальным образом отичается, потому как на передний план выходят задачи Управления, в том числе обработки потоков/выборок данных. Да и система распределения доступа там на порядок сложнее нежели на внешней части, где обычно хватает гость+пользователь+модератор. В админке же по хорошему должны быть разные группы пользователей с настройкой не только доступа к разделам, но и видов доступа (чтение/запись), и в том числе настройка внешнего вида форм управления, как то доступ на чтение/запись отдельных полей в каждых типах данных.
Кроме того, как показывает опыт - очень полезно иметь в системе управления систему отката любых действий - очень помогает =)