Principales respuestas
DESHABILITAR/OCULTAR CAMPOS EN LA VISTA

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
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
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
- Propuesto como respuesta Juan Jose Gazzola 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 -
-
>>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 -
-
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.
- Editado Willams Morales 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
-