Autorización en Asp MVC 5

Publicado en 'Programación' por edinson_al, 2 Feb 2019.





  1. edinson_al

    edinson_al Miembro frecuente

    Registro:
    24 Mar 2015
    Mensajes:
    80
    Likes:
    4
    Temas:
    23




    Buenas,
    Tengo una aplicación en la cual la autorización se gestiona decorando las clases o métodos con el atributo Authorize de la siguiente manera:
    Código:
    [HttpGet]
    [Authorize(Roles = "Rol1,Rol2,Rol3")]
    public ActionResult Index()
    {
        return View();
    }
    
    El problema con esto es que se debe modificar la aplicación cada vez que se desea asignar/desasignar un rol ya sea a una clases o a un método. Investigando un poco veo que se puede crear un atributo personalizado que herede del atributo Authorize y sobreescribir los métodos AuthorizeCore y HandleUnauthorizedRequest para controlar de manera dinámica si el usuario logueado está autorizado o no respectivamente para una determinada operación. Ahora bien, imagino que de todas maneras debo tener algún tipo de relación almacenado en la Base de Datos entre los roles y los correspondientes recursos (clases o métodos decorados con el atributo personalizado) a los cuales tendrá acceso dicho rol, una tabla que podría llamarse Rol_Recurso por ejemplo y sea ésta la información que se verifique en el método AuthorizeCore. No sé si voy por buen camino, quisiera poder leer sus opiniones al respecto o cómo suelen implementar la autorización basada en roles para sus aplicaciones web en .Net.

    Muchas gracias, saludos cordiales.
     


  2. billytalent

    billytalent Miembro diamante

    Registro:
    27 Ago 2015
    Mensajes:
    17,273
    Likes:
    2,636
    Temas:
    17
    @gnox te puede ayudar. :yeah:
     
  3. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    1,926
    Likes:
    759
    Temas:
    68
  4. edinson_al

    edinson_al Miembro frecuente

    Registro:
    24 Mar 2015
    Mensajes:
    80
    Likes:
    4
    Temas:
    23
    Gracias @gnox por el enlace aunque aplica para .Net Core, veré si consigo adaptarlo a .Net 4.x

    Saludos.