2011-02-10 14 views
10

Buenas tardes - Tengo una pregunta muy general hoy - Me han encargado crear una aplicación web para administrar información básica sobre los clientes. Es una aplicación muy simple, pero lo que no sé es qué tener en cuenta para desarrollar el sitio en torno al soporte de múltiples usuarios en sus propios dominios o subdominios de nuestra url.¿Qué se debe tener en cuenta al desarrollar una aplicación MVC asp.net de múltiples usuarios?

¿Cómo puedo impedir que los usuarios inicien sesión en la otra parte de la aplicación?

He visto mencionar el alcance de la base de datos en preguntas similares sobre Stack Overflow, ¿podría alguien explicar las mejores prácticas para una implementación como esta?

¿Hay alguna característica nueva en MVC3 para admitir multi-tenancy? Me enfrento a este problema con MVC2 y mi sitio de comercio electrónico, donde decidimos que lo queríamos etiquetado en blanco y personalizable para múltiples propietarios de tiendas, y no sabemos por dónde empezar a implementar estas características en una aplicación existente. Cualquier entrada es apreciada.

edición

dar más detalles sobre multi-alquiler, lo que quiero decir - en el contexto de una tienda, por ejemplo, varios usuarios registrarse en su propia tienda en www.mystore.com y da a cada uno una subdominio único para acceder a su propia instancia de la tienda, en user1.mystore.com, user2.mystore.com, etc. Cada tienda tendría clientes con historiales de pedidos, y esos clientes tendrían inicios de sesión. Necesitaría restringir a los clientes de user1.mystore.com para que no inicien sesión en user2.mystore.com sin una nueva cuenta, e igualmente evitar que user2.mystore.com acceda al historial de clientes de user1.mystore.com.

Respuesta

20
+0

Excelentes enlaces, gracias! Voy a pedirle que instale instancias separadas de la tienda para cada cliente y evite el dolor de cabeza de destruir la aplicación. – Gallen

+0

Para MVC 4 existe otra posibilidad ahora: las vistas se pueden redirigir utilizando el modo de visualización personalizado. P.ej. a Index.TenantName.cshtml y Index.TenantName.Iphone.cshtml – bushed

7

Lo más probable es que esté a punto de dedicar bastante tiempo a reestructurar su base de datos.

El primer paso es que va a crear una tabla para albergar su lista de "Inquilinos". Luego, debe agregar este TenantId a casi todas las tablas de su sistema para asegurarse de que nadie se pise entre sí. Puede saltarse cualquier tabla que sea de naturaleza global. Un ejemplo podría ser una lista de códigos de estado.

Sin embargo, todo, desde los usuarios hasta los datos que tienen, etc. tendrán que tener esta identificación. Además, modifique todos sus índices para tener en cuenta el inquilino.

Una vez que tenga eso, tendrá que modificar todas sus consultas para tener en cuenta el inquilino.

Una columna de la tabla de inquilinos debe ser la url del portal. Como customername.oursite.com o lo que sea. De esta forma, puede señalar varias URL al mismo código exacto. Cuando el sitio necesita usar el inquilino actual, simplemente búsquelo según la URL que ingresó.

Si estuviera haciendo esto, planearía pasar de 1 a 2 horas por tabla en la base de datos para hacerlo "multi-tenant". Obviamente, algunas tablas (y sus consultas) irán más rápido; otros tardarán más.

Por cierto, esto no cubre cosas como la personalización de la interfaz de usuario (apariencia) por inquilino o algo por el estilo. Si necesita hacer esto, tendrá que crear un directorio en el servidor para que cada inquilino mantenga sus hojas de estilo o cargarlo directamente desde el DB (que tiene sus propios problemas con respecto al almacenamiento en caché).

Por lo general, diseña para esto al principio del proyecto. Reponer un proyecto ya (o casi) completo es un PITA.

Finalmente, prueba, prueba, prueba y haz más pruebas.Deberá asegurarse de que cada consulta solo obtenga los datos que necesita.

+1

En este artículo se describen varios diseños de bases de datos: http://msdn.microsoft.com/en-us/library/aa479086.aspx – rboarman

+0

@rboarman: buen enlace. Me olvidé de eso. – NotMe

Cuestiones relacionadas