2010-03-23 24 views
6

¿Se considera una mala práctica tener múltiples vistas para la misma URL en MVC, en función de diferentes roles de usuario? Por ejemplo: http://www.domain.com/ViewProductID/123 mostrará una página de producto "normal" para un usuario normal y mostrará una versión "mejorada" (estadísticas del producto, posibilidad de editar el título, etc.) a alguien que haya iniciado sesión como administrador.MVC - Misma URL, múltiples vistas

Si es una mala práctica, ¿por qué? Si está bien, ¿cuál es la mejor manera de implementarlo? 2 plantillas separadas o 1 plantilla dispersa con if..else?

Gracias!

Respuesta

2

Creo que está bien modificar la vista en función del contexto; pasa todo el tiempo. Si usted hace el if ... else o los múltiples archivos aspx realmente depende de cómo mucho es diferente. Un par de opciones alternativas:

1) el uso Html.RenderAction llamar contra un AdminController acciones para incorporar la materia, la AdminController puede devolver resultados vacíos si el usuario no es un administrador

, o mejor:

2) utilice una página maestra diferente según el rol/estado del usuario. De esta forma, puede extraer la lógica para configurar el máster en un filtro de acción que le guste, y hacerlo una vez, pero aplíquelo donde sea que tenga sentido. Solo asegúrese de que las páginas maestras alternativas sean compatibles con las vistas en términos de contentplaceholderId.

+0

+1 Respuesta bonita y detallada. – systempuntoout

1

En mi opinión, está bien tener la misma URL para usuarios y administradores. la verdadera pregunta es acerca de la usabilidad para sus usuarios. ¿Esto tiene algún impacto en ellos? Muchos sitios que usan MVC presentan contenido adicional o enlaces dependiendo del nivel de autorización.

¿Qué marco y lenguaje estás usando? Es posible que no necesite una plantilla completamente diferente si tiene algo así como vistas parciales disponibles para usted.

1

Si las páginas no van a ser drásticamente diferentes (es decir, muestran los mismos datos, posiblemente con más para los administradores), entonces diría que coloque todo el código en el mismo archivo. Si es posible, utilizar un sistema de gestión de la capacidad basada en roles para que pueda preguntar cosas como la siguiente:

if can? :create, Users do 
    ... 
else 
    ... 
end 

A continuación, configurar sus capacidades de manera que los administradores y los administradores pueden crear tanto usuarios. De esta forma, no tiene que preocuparse por quién es el usuario, solo lo que el usuario puede hacer.

1

Básicamente está hablando de permisos que dan como resultado páginas diferentes, que es una cosa muy común de hacer. Piensa en la página de inicio predeterminada en Facebook para 2 personas diferentes.

La implementación es la misma que para cualquier otra cosa: combine elementos comunes donde pueda reutilizar. Las diferencias simples pueden entrar si ... diferencias menores y más complejas pertenecen a diferentes plantillas.

Cuestiones relacionadas