2008-12-08 8 views
5

Así que he estado trabajando en una pequeña aplicación web (sitio) para un grupo de amigos y me he dado cuenta de que las cosas deben cambiar. La aplicación tiene dos caras a lo¿Cómo se pueden diseñar las funciones de visitante y administración en una sola aplicación web ASP.Net MVC?

  1. un lado del lado público que sirve de datos dinámicos a los visitantes y no los administradores, y
  2. una parte de administración, donde los administradores pueden actualizar o crear los datos dinámicos para ser servido.

Esta aplicación comenzó como un único proyecto de formularios web seccionado por páginas separadas y la seguridad de las carpetas web.config. Luego creció en proyectos separados (MVC admin side y webforms front end). Más tarde tuve que llevarlo a donde está hoy, una única aplicación web con una mezcla de MVC (administrador) y webforms (público), debido a problemas de implementación.

Ahora estoy buscando migrarlo a un solo proyecto MVC. Me gustaría mantener mis funciones administrativas desesperadas desde mi lado público por URL como/Admin y no estoy seguro de cómo hacerlo. He leído muchos temas sobre cómo agrupar controladores en módulos, pero aún no estoy seguro de que sea lo correcto.

  • ¿Debo simplemente crear funciones administrativas en línea con el resto de la aplicación pública y determinar si el usuario está conectado o no?
  • ¿O debo crear controladores de administración que estén separados de los controladores públicos (EventAdminController vs CalendarController)?
  • ¿Qué han hecho otros?

Sugerencias bienvenidas, gracias stackoverflow.


Sí, estoy utilizando el framework ASP.Net MVC de Microsoft. Darryl, ¿dices que coloque mis vistas en una carpeta Admin y la proteja utilizando un web.config (para verificar la seguridad y los roles) o para colocar mis controladores en una carpeta Admin?

Mis suposiciones eran que usted estaba diciendo que coloque los controladores en una carpeta de Admin, por ejemplo debajo de los controladores. Esto aún significaría que HomeController in/Controllers es diferente de HomeAdminController en/Controllers/Admin. En este caso, podría configurar rutas específicas para cada uno, pero no veo cómo protegerlos simplemente colocando un controlador en una carpeta diferente (a menos que use el atributo Autorizar en las acciones).

En cuanto a colocar las vistas en una carpeta diferente, puedo ver cómo eso podría funcionar en teoría. Pero, ¿no se ejecutaría el controlador (en teoría, sin ningún atributo de autorizar) hasta el punto en que se devuelva la vista? Entonces esperaría una redirección o un error. De cualquier manera, no me gustaría ejecutar mi acción de controlador si no puede acceder a la vista, y preferiría no realizar ninguna comprobación previa de acción interna.

Respuesta

1

En un proyecto de MVC en el que estoy trabajando pongo todo el material de administración en una carpeta de administrador. Para ver la carpeta de administración, debe estar autenticado y en la función correcta. Mis controladores tienden a ser muy mínimos, la mayoría de la lógica está en una capa de negocios que usan los controladores.

+0

No estoy seguro de cómo funcionaría eso con los controladores. Ellos no conocen fronteras. He utilizado este método en el mundo de formularios web y funciona bien. Puedo organizar mis controladores mejor, pero tendría que tener un nombre único en todos los controladores en el proyecto. –

+0

¿Está utilizando ASP.NET MVC Framework que proporciona Microsoft o algún otro framework MVC para ASP.NET? En ASP.NET MVC Framework los controladores están estrechamente vinculados a las vistas de forma predeterminada. para que la url http://www.example.com/admin/something/1/ llame a AdminControler.Something (1) –

+0

también puede usar filtros, áreas, enrutamiento con restricciones de autenticación o contenedores IOC con lógica de autenticación para realizar este tipo de funcionalidad –

2

Tenemos un problema similar en el que estamos creando una gran aplicación ASP.NET MVC y para separar la funcionalidad en áreas, estamos utilizando un proceso muy similar al this post by Phil Haack.Al crear áreas, puede tener nombres de controlador únicos para cada área en lugar de toda la aplicación, puede separar sus módulos mucho más fácilmente y puede compartir la autenticación y la funcionalidad básica común.

Cuestiones relacionadas