none
Roles y permisos en una vista razor RRS feed

  • Pregunta

  • Hola comunidad! Tengo un problema con permisos en asp.net mvc 5

    Tengo 4 usuarios del sistema, una vista y nada mas que una Vista. 

    Llamemos a los usuarios A, B, C, D

    A = Create,Read,Update,Delete todos los registros

    B = Create,Read,Update todos los registros <= debo ocultar el boton eliminar

    C = Read todos <= debo ocultar botones de eliminar y actualizar

    D = Read <= ocultar botones y solo mostrar los registros que le fueron asignados.

    Debo ocultar botones.

    Cree un helper que funciona perfecto, pero en el proyecto me exigieron usar el identity de ASP.NET y no tengo idea como hacerlo, el [Authorize] solo logro que me deniegue la vista mas no un elemento dentro de ella.

    Por favor alguna documentacion que pueda leer o alguien que me pueda orientar seria de gran ayuda. Gracias.


    • Editado jose_boliv domingo, 19 de noviembre de 2017 4:27 falto informacion
    domingo, 19 de noviembre de 2017 4:27

Respuestas

  • Para ocultar un botón pon algo así como esto:

    @if (User.IsInRole("rol1")) { <input type="button" etc etc /> }

    SI no te reconoce "User", pon "System.Web.HttpContext.Current.User".

    Ojo, fíjate que funciona por roles y no por usuarios, se supone que los usuarios los habrás asignado antes a los roles correspondientes. Si eso no te vale, y necesariamente lo quieres por nombre de usuario, pon User.Identity.Name=="A".

    Precaución: No es suficiente con ocultar el botón, porque el usuario podría hacer el Post manualmente directamente a la URL correspondiente, si se quieren saltar el permiso. Así que asegúrate de que también pones el [Authorize(...)] en el correspondiente método de acción.


    Editado: Obviamente, en el "@if" puedes poner un OR (escrito || en C#) si quieres que varios usuarios o roles vean el mismo botón.
    domingo, 19 de noviembre de 2017 10:16

Todas las respuestas

  • Para ocultar un botón pon algo así como esto:

    @if (User.IsInRole("rol1")) { <input type="button" etc etc /> }

    SI no te reconoce "User", pon "System.Web.HttpContext.Current.User".

    Ojo, fíjate que funciona por roles y no por usuarios, se supone que los usuarios los habrás asignado antes a los roles correspondientes. Si eso no te vale, y necesariamente lo quieres por nombre de usuario, pon User.Identity.Name=="A".

    Precaución: No es suficiente con ocultar el botón, porque el usuario podría hacer el Post manualmente directamente a la URL correspondiente, si se quieren saltar el permiso. Así que asegúrate de que también pones el [Authorize(...)] en el correspondiente método de acción.


    Editado: Obviamente, en el "@if" puedes poner un OR (escrito || en C#) si quieres que varios usuarios o roles vean el mismo botón.
    domingo, 19 de noviembre de 2017 10:16
  • Hola! gracias por la respuesta.

    Ya lo habia intentado y con mvc 4 membership funciona perfecto, pero cuando lo intento con mvc5 identity me genera errores como:

    -"No se puede conectar a la base de datos"

    -"La caracteristica administrador de roles no esta habilitada"

    O simplemente se queda en un bug y no arroja ningun error.

    Agregue una referencia system.Web.Providers y funciona, pero me genera las tablas membership en la base de datos aunque no las use. Lei que parte del problema esta en el Web.config <roleManager> pero desconozco como resolverlo y la documentacion que consigo la solucion siempre es la misma y me genera los errores anteriores.

    domingo, 19 de noviembre de 2017 14:33
  • Muchas Gracias, solo me faltaban una referencia que borre de tantas pruebas.
    martes, 21 de noviembre de 2017 2:37