2009-07-23 10 views
9

He creado un sitio web de MVC en IIS6. Usé la seguridad incorporada ASP.NET sin membresía, solo la forma en que se implementó en la solución de plantilla. Es fácil asegurar un controlador o una acción, pero ahora debo exponer la administración de usuarios a un administrador que haya iniciado sesión en el sitio. Entiendo que los controles ASP incorporados para hacer esto no son "mejores prácticas" y son un perro para trabajar. Entonces, ¿cuál es la mejor práctica para ofrecer administración de usuarios a través de una aplicación ASP.NET MVC?¿Cómo expongo la seguridad incorporada y la administración de usuarios a una aplicación MVC?

Consideré usar Entity Framework y conectarlo a la miríada de procs almacenados. pero eso parece incomodo. Veo opciones para AccountMembershipService y FormsAuthenticationService. Eso es lo que usa el controlador de cuenta del proyecto existente. Pero, no soy fimilar con ninguno de los dos.

No puedo evitar pensar que esto ya debería haber estado allí desde la plantilla del proyecto. Esta es una parte fundamental de cualquier sitio web y le dieron 15%, ¿por qué no el resto?

+0

¿Qué versión de IIS va a usar? Estoy bastante seguro de que IIS 7 tiene algo incorporado para la administración de usuarios. – Perhentian

+1

Quizás debería simplemente actualizar su pregunta en lugar de publicar muchos comentarios, lo hace más legible para las personas que intentan responder a su pregunta :) – Peter

Respuesta

0

Tengo la autenticación de usuario funcionando de una manera algo cuerda ahora. El mayor obstáculo que hay que superar es que está BIEN usar las clases de Membresía, aunque no estoy usando el aspecto Perfil de membresía. Es fácil obtener el nombre de usuario y hacer Membership.GetUser (UserName). Luego puede hacer muchas cosas como Desbloquear, Aprobar/Desaprobar, cambiar la contraseña y cambiar la contraseña pregunta/respuesta ... todo lo básico que necesito.

Aquí están los fundamentos:

'get current logged in user 
Dim currentUser As MembershipUser = Membership.GetUser() 

'get current logged in user name 
Dim userName = currentUser.UserName 

'get current user email 
Dim userEmail = currentUser.Email 

'get a user to edit 
Dim editingUser = Membership.GetUser(UserName) 

'set the user email 
editingUser.Email = newEmail 
Membership.UpdateUser(editingUser) 

‘unlock user 
editingUser.UnlockUser() 

‘disapprove user 
editingUser.IsApproved = False 
Membership.UpdateUser(editingUser) 

‘approve user 
editingUser.IsApproved = True 
Membership.UpdateUser(editingUser) 

‘change pw 
editingUser.ChangePassword(oldPw, newPw) 

y que es en su mayoría todo lo que hay demasiado que

1

Por lo que puedo decir, está utilizando SqlMembershipProvider como su implementación de Proveedor de membresía. Yo fuertemente sugeriría que echar un vistazo a algunos de los métodos de MembershipUser y MembershipProvider clases (como CreateUser, etc) para lograr lo que estamos tratando de hacer en lugar de trabajar con las tablas de bases de datos de base utilizados para la la implementación.

También puede echar un vistazo a this article para una introducción en profundidad a Proveedores de Membresía, Roles y Perfil de ASP.NET proveedores.

+0

que suena como el área donde fui un poco. Gracias por el artículo. Sin embargo, creo que el MVC solo utiliza una parte de esta funcionalidad, y quiero evitar usar todo el Mecanismo de membresía. Pero tal vez esa es una mala idea, ya veremos. – DrydenMaker

+0

También quería señalar que he estado evitando tutoriales como este porque realmente no encajan con el MVC. Buen artículo, aclaro algunas cosas para mí. – DrydenMaker

+0

Me doy cuenta de que el tutorial no encaja con la mentalidad de MVC, pero le da los conceptos básicos de manipulación de los objetos de Membresía, Función y Perfil que puede usar para construir su proyecto MVC. Me doy cuenta de que es un PITA no tener un kit de inicio para la administración de membresía incluido con ASP.NET MVC. Sin embargo, dado el historial de desarrollo, creo que el hecho de que el filtro [Autorizar] incluso exista de fábrica se debe a que fue trivial implementarlo para el equipo de MVC. Por lo tanto, supongo que debe confiar en la plantilla de MVC predeterminada más como una demostración que como punto de partida. – paracycle

1

Salida este proyecto en CodePlex: ASP.Net MVC Membership Starter Kit

+0

Alguien se preocupará de comentar por qué se votó negativamente? AFAIK este proyecto le permite editar usuarios de membresía y roles dentro de MVC. (Si es realmente incorrecto, eliminaré la respuesta) –

+0

No sé por qué se votó negativamente, pero ¿se trata de una parte oficial del MVC? Parece como debería haberse hecho, eso es de una manera más completa. – DrydenMaker

+0

Veo una razón, creo que el ASP.Net MVC Membership Starter Kit está escrito en C#, mientras que estoy usando VB2k8. – DrydenMaker

0

No sé acerca de "las mejores prácticas", pero esta es la forma en que lo haría (y la forma en que es una especie de escrito en "Professional ASP.NET MVC 1.0"):

Debe tener un proveedor de perfiles (Customized Provider Providers) personalizado y un MembershipProvider (proveedor de miembros) personalizado para que esto funcione.

Cree un controlador que maneje todas las acciones de administración de miembros, p. Ej. MemberAdminController

Este controlador debe tener el atributo Autorizar [Roles = "Administrador"] especificado de modo que todas las acciones en este controlador solo se manejarán si el usuario tiene el rol de Administrador.

Ahora puede crear las vistas y acciones de CRUD de la forma en que le gustaría usar solo este controlador.

+0

Esa es la dirección en la que voy. Creo que la plantilla del proyecto es una travesía, ya que permite el registro y todo, PERO se expone a la administración. Es una manera segura de obtener un montón de aplicaciones deficientes por ahí. – DrydenMaker

+0

Todo depende de cómo implemente su autenticación. No creo que sea una travesía, el framework asp.net mvc le da al desarrollador mucha más responsabilidad porque muchas cosas no se manejan de manera predeterminada con los formularios web. Si no necesita autenticación para el resto de su sitio, simplemente no se lo proporcione. Siempre debe exponer un formulario de inicio de sesión público para acceder a su administrador ... esto no es diferente de los formularios web. – Peter

Cuestiones relacionadas