Как лучше всего разрешить пользователям менять шаблоны? - PullRequest
6 голосов
/ 27 апреля 2011

В одном из моих проектов у моих пользователей будет выделенная часть моего сайта ({username} .example.org). В этом поддомене я планирую позволить им легко менять дизайн. Я посмотрел на какой-то онлайн-сайт, который уже делает это, например Tumblr , Posterous и Shopify .

Что касается языка этого приложения, я начал его с Django, в котором я успешно реализовал "рендеринг шаблонов, основанный на имени URL-адреса со стандартным откатом" * (http://someuser.example.com будет загружать шаблоны в шаблонах / someuser / * или в шаблонах / generic / *, если не найдено в первом). Но я могу экспортировать его в PHP или Play! Framework, если они более приспособлены к моим потребностям.

Используется шаблонный движок Jinja2 , поскольку он так же прост, как шаблонизатор Django, прост в освоении и безопасен (ни один Python-код не может (должен нормально!) Выполняться).

Вот плюсы / минусы каждого решения, которое я нашел. Я был бы очень признателен за ваши мысли об этом и о том, как вы поступите, почему. Благодаря.

Примечание: пользователи будут хорошо знать HTML / CSS.

Изменение переменных (например, цвет заголовка и т. Д.)

  • Плюсы:

    1. Простой и безопасный
  • Минусы:

    1. Слишком ограниченный, пользователь, который хочет персонализировать свой сайт, не сможет сделать это с этим решением

Только загрузка CSS

  • Плюсы:

    1. Простота интеграции
    2. Безопасный
  • Минусы:

    1. Limited
    2. Где хранится изображение пользователя? (логотип, фон, градиент и т. д.)

Разрешить пользователю редактировать шаблоны (хранятся в базе данных)

  • Плюсы:

    1. Изменения важнее
    2. Пользователь (почти) может делать все, что ему захочется (реализует GA, FeedBurner и т. Д.)
  • Минусы:

    1. Куда они помещают статические файлы (логотип, фоновое изображение, какой-то спецэффект (градиент))?
    2. Шаблоны хранятся в базе данных, что требует еще одного запроса SQL для каждой отображаемой страницы.

Разрешить пользователю редактировать шаблоны (хранятся в файлах)

  • Плюсы:

    1. Изменения важнее
    2. Пользователь (почти) свободен делать все, что он хочет (реализует GA, FeedBurner и т. Д.)
    3. Доступ по FTP может быть включен, рутируя пользователя в его папке Template.
  • Минусы:

    1. Та же проблема для статических файлов

Кроме того, я застрял в том, как обрабатывать статические файлы (изображения, css, js): я не вижу, как определить VirtualHost в Apache (или NGinx), который будет запрашивать базу данных, чтобы узнать, какие пользователи принадлежит этот URL.

Спасибо за вашу помощь, я ценю!

1 Ответ

4 голосов
/ 20 мая 2011

Хорошо, я отвечу сам, основываясь на том, что я сделал, и на своем исследовании.

Как отметил Стив, вы должны быть очень осторожны, позволяя пользователям настраивать макет страницы.

Риск должен быть хорошо оценен!

В моем случае разрешить пользователям изменять полный HTML / CSS / JS можно, например, Posterous или Tumblr делает.

Риски:

  • Пользователь может добавить код JavaScript, который будет собирать файлы cookie других пользователей.При этом этот пользователь может иметь доступ к любому идентификатору токена для административной части пользователей друг друга. Простое решение состоит в том, чтобы избежать перекрестных файлов cookie между частью администрирования и веб-сайтом пользователя.
  • Пользователь может попытаться выполнить код в шаблоне, например Python, PHP, Java, Ruby и т. Д.(относительно того, что это используется). Решение здесь заключается в использовании шаблонизатора, который полностью запрещает использование кода, только теги . Jinja2 для Python идеально подходит для этого.

Если эти два условия хорошо оценены, опция " Разрешить пользователю редактировать шаблоны (хранятся в базе данных) "- хорошее решение.

Но если вас беспокоит слишком большое количество попаданий в базу данных, последнее решение, иначе" Разрешить пользователю редактировать шаблоны (сохраненные в файлах)", возможно, если:

  • Вы убедитесь, что пользователь не может получить доступ к другой папке, к которой у него есть доступ к каталогу шаблонов. Вы можете сделать это с помощью чего-то вроде установки FTP-сервера, который использует базу данных для доступа пользователя (например, ProFTPd с MySQL), и привязки пользователя к папке его шаблона dir.Также очень важно установить квоту, чтобы пользователь не использовал свой шаблонный каталог в качестве устройства хранения;)

Ну, я думаю, что я рассмотрел всю проблему.Возможно, я пропущу некоторые моменты, если это так, пожалуйста, добавьте комментарий или новое сообщение, и я дополню ответ.

...