2011-03-07 10 views
6

Tengo una aplicación MVC 3 que estoy creando y necesito encontrar una buena solución para gestionar la autenticación y la autorización. He utilizado Membresía, y no quiero usarla en este caso. Prefiero usar mi propio diseño y tablas. Sin embargo, estoy abierto a implementar mi lógica personalizada utilizando las interfaces integradas, si es apropiado.Ayuda con la solución de autenticación/autorización de MVC

Éstos son mis requisitos:

  • Un usuario puede ser parte de una o varias funciones.

  • Las funciones se pueden asignar a cualquier cantidad de "permisos" (muchos a muchos). Un permiso es algo así como "Puede editar las publicaciones de otros usuarios".

  • Cada acción del controlador puede permitir el acceso a una o más funciones (o puede no requerir autorización para páginas públicas).

  • También necesitaré un control de "nivel de función" sobre qué roles pueden ver/actualizar varios elementos en una vista. Puede usar permisos para conducir estos vs. roles.

  • Como nota al margen, probablemente también permitiré a los miembros registrarse con sus cuentas de Facebook y/o Twitter. Pero esto se puede hacer independientemente de la implementación de membresía personalizada, si es apropiado (es decir, crear un usuario personalizado al registrarse y luego vincularlo a la cuenta de FB/Twitter).

Estoy seguro de que alguien ha hecho algo así antes. Pero en base a la docena o más de blogs y publicaciones de SO que he visto sobre este tema, ninguna de las soluciones realmente se ajusta a esto, no parece. Pero hay una buena posibilidad de que no sea capaz de encajar las piezas, y algo apropiado es mirarme directamente a la cara.

Por ejemplo, he leído algo sobre la autenticación basada en reclamos vs. "basada en funciones", pero no estoy seguro de entender las diferencias suficientes para hacer una llamada, ni el clima o no requieren membresía ASP.NET. También he leído sobre la creación de membresía personalizada implementando IPrincipal e IIdentity y utilizando filtros de acción para controlar el acceso de los controladores, pero no encuentro ninguna guía exhaustiva para hacerlo, y todavía estoy bastante verde con los filtros de acción.

Tampoco estoy seguro de si debería usar alguno de los controles incorporados de .NET para el registro, la autenticación, la contraseña olvidada, etc. Mi instinto no es hacerlo, ya que normalmente me gusta construirlos yo mismo, y yo ' Tampoco estoy seguro de si funcionarían en una configuración personalizada. Pero si me equivoco, házmelo saber.

Gracias de antemano.

+0

Puede que te guste mi enfoque http://stackoverflow.com/questions/3964989/how-to-pass-current-user-information-to-all-layers-in-ddd/3969014 # 3969014 –

Respuesta

4

Recuerde que hay 2 partes diferentes para el marco de Autenticación/Autorización de ASP.NET. El primero es el front-end con membresía y proveedores de roles y luego está el back-end usando SqlMembershipProvider y SqlRoleProvider.

En mi experiencia personal, he encontrado que es más fácil escribir mis propias versiones personalizadas de MembershipProvider y RoleProvider. Creo que satisfará cada uno de sus requisitos.

actualización: Jared me preguntó: "Parece que la implementación de MembershipProvider y RoleProvider añade un montón de gastos generales (y pelusa) que nunca voy a necesitar/uso ¿Sigue siendo el camino a seguir ¿Qué me beneficio de hacerlo.? ¿esta?"

Creo que si utiliza el marco de Autenticación/Autorización, puede aprovechar muchas cosas integradas. Por ejemplo, puede decorar los controladores su autorización de métodos en función de roles como [Authorize(Roles = "DefaultUser")]. También puede poner este tipo de comprobación de código directamente en los puntos de vista, si es necesario, como:

<% if (Request.IsAuthenticated) { %> 
<p>Only authenticated users see this.</p> 
<% } %> 

Además, la autenticación/autorización se encarga del trabajo sucio de la creación de roles galletas/usuario y la encriptación de ellos Si sacas su cuenta, entonces esto es algo. tiene que hacer usted mismo.

Jared también quiere, "Un usuario ca n ser parte de uno o múltiples roles. "y" Los roles pueden asignarse a cualquier cantidad de "permisos" (muchos a muchos). Un permiso es algo así como "Puede editar las publicaciones de otros usuarios".

Considero que los roles y los permisos son los mismos. Entonces, un solo usuario podría tener múltiples roles y permisos. Al igual que "CanEditPosts" "Administrador", etc.

+0

Gracias por su respuesta. Pero estoy tratando de entender lo que esto me gana. Ya tengo métodos de servicio que estoy usando para crear usuarios y autenticarlos. Mirando [este artículo] (http://mattwrock.com/post/2009/10/14/Implementing-custom-Membership-Provider-and-Role-Provider-for-Authinticating-ASPNET-MVC-Applications.aspx), parece que la implementación de MembershipProvider y RoleProvider agrega una gran cantidad de gastos generales (y gastos) que nunca necesitaré/usaré. ¿Todavía es el camino a seguir? ¿Qué beneficio me da hacer esto? Gracias de nuevo. –

+0

@Jerad - He añadido algunos comentarios para abordar sus puntos anteriores ... – Keltex

+0

Gracias, buenas cosas. En cuanto a su último comentario sobre roles = permisos, en realidad quiero un control más detallado de las funciones y los permisos. Por ejemplo, algunos permisos (CanEditPosts) pueden caer bajo múltiples roles (Administrador, Moderador). Quiero agrupar estos permisos en roles para que un usuario se asigne a un grupo de permisos (un rol) en lugar de un grupo de permisos individuales. Entonces tendré que apoyar eso. Parece que tendré que extender un poco los proveedores básicos. –

Cuestiones relacionadas