vista tutorial paso net mvc modelo form entre ejemplo diferencias controlador asp asp.net-mvc-2 authorization rhino-security

asp.net mvc 2 - tutorial - Encontrar el marco de autorización para ser utilizado en un proyecto ASP.NET MVC



razor mvc (3)

Tengo un proyecto asp.net mvc y persistente es manejado por repositorios. Se usa la autenticación de formulario. Ahora necesito implementar la autorización. Por ejemplo, debo asegurarme de que un usuario administrador solo pueda abrir sus tareas y asignar trabajadores a las tareas. Un trabajador solo verá las tareas asignadas a él / ella. Un super moderador puede editar todo. ¿Hay algún marco listo para usar que me permita definir permisos?

Estoy en el proceso de evaluar Ayende Rhino Security. ¿Dónde puedo obtener más códigos de ejemplos? ¿Cuál es su opinión sobre Rhino Security?
Mi proyecto utiliza Linq a SQL y no ha hecho uso de NHibernate. ¿Puede Rhino Security funcionar sin NHibernate?


Creo que los atributos de asp.net mvc serán buenos para esa tarea.

Primero necesita crear una lista de roles y de alguna manera hacer referencia a ella con el usuario. De lo que necesitas es que guardes las funciones de usuario en la sesión después del inicio de sesión. Que marque controladores o acciones con este atributo. En el atributo debes pasar los roles que necesitan para realizar alguna acción. En la implementación de atributos solo necesita comprobar si el usuario tiene algún rol, entonces no tiene nada que hacer, de lo contrario, redirija a la página no autorizada. O lanzar alguna excepción personalizada y redirigir en global.asax.

Mb compruebe este artículo para ver el ejemplo del código.



Me temo que Rhino Security depende de Nhibernate para funcionar.
Estuve evaluando Rhino Security durante un par de meses y, al final, decidí usarlo porque es un producto realmente bueno.
Puede encontrar información útil en el blog de Ayende o aquí . Me he rezagado un poco para integrarlo con StructureMap (en lugar de Castle Windsor). Puedes encontrar algo de información aquí .
Para hacer lo que intenta lograr, debe definir una clase que implemente la interfaz IEntityInformationExtractor.

En primer lugar, debe agregar las siguientes referencias (He recompilado Rhino Security with NH 3.0) a:

  • Microsoft.Practices.ServiceLocation
  • NHibernate
  • NHibernate.ByteCode.Castle
  • StructureMap
  • Rhino.Security
  • StructureMapAdapter

Luego defines un bootstrapper:

public static class Bootstrapper { public static void Initialize() { ObjectFactory.Initialize(cfg => { cfg.UseDefaultStructureMapConfigFile = false; cfg.IgnoreStructureMapConfig = true; cfg.AddRegistry<StructureMapRegistry>(); }); ServiceLocator.SetLocatorProvider(() => new StructureMapServiceLocator(ObjectFactory.Container)); } }

A continuación, define la clase de registro de StructureMap:

public class StructureMapRegistry : Registry { public StructureMapRegistry() { string ConnDb = "Data Source=(local); Initial Catalog=RhinoSecurity_Test; Trusted_Connection=true;"; For<ISessionFactory>() .Singleton() .TheDefault.Is.ConstructedBy(() => new NHSessionFactory(ConnDb, false).SessionFactory); For<ISession>() .Singleton() .TheDefault.Is.ConstructedBy(x => x.GetInstance<ISessionFactory>().OpenSession()); For<IAuthorizationRepository>() .Use<AuthorizationRepository>(); For<IPermissionsService>() .Use<PermissionsService>(); For<IAuthorizationService>() .Use<AuthorizationService>(); For<IPermissionsBuilderService>() .Use<PermissionsBuilderService>(); For<IEntityInformationExtractor<Model.Task>>() .Use(p => { return (new TaskInfromationExtractor(p.GetInstance<ISession>())); }); } }

NHSessionFactory básicamente crea una fábrica de sesión NH.

Creé una clase ( TaskInfromationExtractor ) que implementa IEntityInformationExtractor. Esto le permitirá definir permisos para la entidad de la tarea. Ahora tu aplicación está lista. Solo tienes que "bootstrap" structuremap:

  • Bootstrapper.Initialize ();

Lo harías cuando tu aplicación se inicie. Ahora puede usar el repositorio de seguridad y los servicios de Rhino para crear usuarios, grupos, relaciones, etc., como lo sugieren los enlaces que le he sugerido. Puedes encontrar una muestra que he preparado aquí