none
DESHABILITAR/OCULTAR CAMPOS EN LA VISTA RRS feed

  • Pregunta

  • Amigos desarrolladores, requiero desabilitar o ocultar (no mostrar) elementos en la vista a partir de que si el usuario logeado tiene ciertos privilegios o no. Utilizo membership para controlar usuarios.

    Por ejemplo, tengo un @ActionLink("ELIMINAR") que me gustaría que sólo se muestre cuando el usuario logeado tenga el rol ADMINISTRADOR, ¿Cómo puedo saber desde la vista que rol tiene el usuario logeado?, o en caso contrario, ¿existe otra manera correcta de resolver lo que menciono?

    Agradezco de antemano su apoyo

    lunes, 13 de enero de 2014 17:03

Respuestas

  • >>¿Es correcto hacer está validación en la vista?

    yo no lo haria, ese

    User.IsInRole("Administrador")

    lo asignaria a una propiedad del modelo y usaria esa propiedad en el if del view

    mas que nada porque el action en el controler es quien debe poner la logica que indica si se muestra o no el link

    piensa si quieres realizar un test de esa funcionalidad, como lo harias si has puesto logica en la view

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Willams Morales miércoles, 15 de enero de 2014 15:52
    miércoles, 15 de enero de 2014 14:56

Todas las respuestas

  • Tenes alternativas para tratar esto una que es bastante sencilla es decorar la acción de tu controlador en tu caso el método Eliminar con el atributo [Authorize(Roles="Aquí especifica los roles, uno o varios separados por coma")] como muestro a continuación:

    [Authorize(Roles = "admin,manager")]
    public ActionResult Eliminar()
    {
    // Acciones del método elminar
    
        }
    

    Este método lo que va hacer es va a solicitar al usuario que se logue si no es administrador. Aquí te dejo un enlace para que puedas profundizar sobre el atributo Authorized http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.98).aspx



    Juan Jose Gazzola Twitter: @juanjo_gazzola http://www.juanjosegazzola.com.ar

    lunes, 13 de enero de 2014 20:50
  • ¿Cómo puedo saber desde la vista que rol tiene el usuario logeado?

    lo que aconsejaria es que en el model que usas en la viwe definas propiedades que permitan especificar si se miestra determinada accion o no, por ejemplo definir una clase que sea

    public class XXModel{

       public bool CanDelete {get; set;}

    }

    entonces en el action asignas esa propiedad que usas en la view

    @if(Model.CanDelete){

       @ActionLink("ELIMINAR")

    }

    desde el action podrias usar las clases de asp.net membership para conocer que rol tiene el usuario

    aunque no mencionaste nada que tipo de autenticacion implementaste

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 13 de enero de 2014 22:36
  • Gracias juan, Gracias Leandro. Leandro, no es un riesgo llevar todas estás características al modelo? Es la única manera de pasar datos a la vista? (aparte del viewbag y viewdata)
    martes, 14 de enero de 2014 3:56
  • >>no es un riesgo llevar todas estás características al modelo?

    no, es justamente como debes hacerlo, la view no puede tener logica en su codigo, por eso la logica la pones en el action del controlador

    a la view solo le indicas que debe o no haces pero con datos simples

    podrias usar una propiedad del modelo o sino el ViewBag, pero yo recomendaria el model

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 14 de enero de 2014 10:59
  • Creo que si mal no entiendo lo que vos estas necesitando es hacer esto

    @if(User.IsInRole("Administrador")

    {

    @ActionLink("ELIMINAR")

    }

    martes, 14 de enero de 2014 13:29
  • Markooo, gracias. Es así como valido en mi método action, no intente probarlo en la vista y sí que funciona, pero regreso a lo mismo ¿Es correcto hacer está validación en la vista?

    Agradeceré sus respuestas, de que funciona... funciona, pero quiero saber si es correcto.


    martes, 14 de enero de 2014 15:48
  • >>¿Es correcto hacer está validación en la vista?

    yo no lo haria, ese

    User.IsInRole("Administrador")

    lo asignaria a una propiedad del modelo y usaria esa propiedad en el if del view

    mas que nada porque el action en el controler es quien debe poner la logica que indica si se muestra o no el link

    piensa si quieres realizar un test de esa funcionalidad, como lo harias si has puesto logica en la view

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Willams Morales miércoles, 15 de enero de 2014 15:52
    miércoles, 15 de enero de 2014 14:56
  • Gracias Leandro, por apoyarme con sustento sobre lo que es correcto hacer.
    miércoles, 15 de enero de 2014 15:52