Pregunta

En uno de mis proyectos, mis usuarios tendrán una parte dedicada de mi sitio web ({nombre de usuario} .example.org). En ese subdominio, planeo permitirles cambiar el diseño fácilmente. Eché un vistazo a un sitio web en línea que ya hace eso, como Tumblr, Posterior y Shop.

Con respecto al lenguaje de esta aplicación, lo comencé con Django, que implementé con éxito un "Renderización de plantillas basada en el nombre de la URL con predeterminado como retraso" (http://someuser.example.com cargará las plantillas en plantillas/syleuser/* o en plantillas/genéricos/* si no se encuentra en el primero). Pero puedo exportarlo a Php o Play!

El motor de plantilla utilizado es Jinja2, dado que es tan simple como el motor de plantilla Django, fácil de aprender y seguro (no se puede ejecutar Python Coode (¡normalmente!).

Aquí están los pros/contras de cada solución que encontré. Realmente apreciaría sus pensamientos sobre eso y de qué manera lo haría, por qué. Gracias.

Nota: Los usuarios tendrán un buen conocimiento en HTML/CSS.

Cambiar Vars (como el color del título, etc.)

  • Pros:

    1. Simple y seguro
  • Contras:

    1. Demasiado limitado, un usuario que quiere personalizar su sitio web no podrá hacerlo con esta solución

Solo sube CSS

  • Pros:

    1. Fácil de integrar
    2. Seguro
  • Contras:

    1. Limitado
    2. ¿Dónde se almacena la imagen del usuario? (logotipo, fondo, algunos gradientes, etc.)

Permitir al usuario editar plantillas (almacenadas en la base de datos)

  • Pros:

    1. Los cambios son más importantes
    2. El usuario es (casi) libre de hacer lo que quiera (implementa GA, FeedBurner, etc.)
  • Contras:

    1. ¿Dónde colocan los archivos estáticos (logotipo, imagen de fondo, algún efecto especial (gradiente))?
    2. La plantilla se almacena en la base de datos, que requiere una solicitud más SQL para cada página que se muestra

Permitir al usuario editar plantillas (almacenadas en archivos)

  • Pros:

    1. Los cambios son más importantes
    2. El usuario es (casi) libre de hacer lo que quiera (implementa GA, FeedBurner, etc.)
    3. Se puede habilitar un acceso FTP, enraizando al usuario en su plantilla Dir.
  • Contras:

    1. El mismo problema para los archivos estáticos

Además, donde estoy atrapado se trata de cómo manejar archivos estáticos (imágenes, CSS, JS): No puedo ver cómo definir un virtualhost en Apache (o Nginx) que solicitaría la base de datos para ver qué usuarios pertenece esta URL .

¡Gracias por tu ayuda, lo aprecio!

¿Fue útil?

Solución

Ok, responderé a mí mismo en función de lo que hice y en mi investigación.

Como Steve mencionó, debe tener mucho cuidado al dejar que los usuarios personalicen el diseño de la página.

¡El riesgo debe ser bien evaluado!

En mi caso, dejar que los usuarios cambien el HTML/CSS/JS completo es posible, en cierto modo, como Posterior o Tumblr lo hace.

Los riesgos son:

  • Un usuario podría agregar un código JavaScript que recopilara una cookie de autores de otros usuarios. Al hacerlo, este usuario podría tener acceso a cualquier autenticación de token para la parte administrativa de los usuarios de los demás. Una solución simple es evitar cookies cruzadas entre la parte administradora y el sitio web del usuario.
  • Un usuario podría intentar ejecutar código en la plantilla, como Python, PHP, Java, Ruby, etc. (con respecto a lo que se usa). La solución aquí es usar un motor de plantilla que no permita el uso del código, solo etiquetas. Jinja2 Para Python es perfecto para eso.

Si esas dos condiciones están bien evaluadas, la opción "Permitir al usuario editar plantillas (almacenadas en la base de datos)"es una buena solución.

Pero si está preocupado por demasiados éxitos, la base de datos podría tener, la última solución, también conocida como "Permitir al usuario editar plantillas (almacenadas en archivos)", podría ser posible si:

  • Te aseguras de que el usuario no pueda acceder a otra carpeta que el directorio de plantilla pueda tener acceso. Puede hacerlo con algo como configurar un servidor FTP que use la base de datos para el acceso al usuario (como ProfTPD con MySQL) y colgando al usuario en su Dir de plantilla. Una cuota también es muy importante para configurar, para evitar que su usuario use su DIR de plantilla como dispositivo de almacenamiento;)

Bueno, creo que cubrí todo el problema. Es posible que pierda algunos puntos, si es el caso, agregue un comentario o una nueva publicación y completaré la respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top