none
Desactivar vistas dependiendo el rol RRS feed

  • Pregunta

  • Buenos días...

    Tengo mi aplicación y estoy buscando una forma fácil de que el usuario según el rol pueda ver algunas vistas (html).. Ejemplo

    Tengo mi usuario Admin: Este puede ver todos mis modulos (vistas)
    Tengo otro como empleado: Este puede ver algunas vistas
    Tengo otro como Externo: Este puede ver algunas vistas.

    Estoy trabajando mvc4 razor, .NET.... ya me puedo logear con mi usuario y clave ... y ya tengo mis roles creados solo tengo que direccionar el logeo de cada rol.

    erikpugo

    martes, 23 de diciembre de 2014 15:40

Respuestas

  • Hola

    Justamente lo que comentas es una "contra" del sistema de "membership & roles" que te propone .NET, pero lo puedes cambiar o extender.

    En mi caso particular ya teniamos una extension y en otras oportunidades un framework completo de "autenticacion y autorizacion" que basicamente es esto

    • Roles (= Grupos de usuarios)
    • Permisos (Permiso para un boton por ejemplo o accion particular) Este permiso no tiene nada que ver con los grupos o roles de usuario
    • La relacion NxN entre Roles y Permisos.

    Asi podras mapear los permisos a estas acciones particulares de tu app o conjunto de applicaciones y tener por separado los roles  (o grupos de usaurios) que poseen dichos permisos

    Con esto mas arriba podras "mapear" lo que preguntas

    PEro ahora otro inconveniente? como haces para "verificar el permiso"????

    Bueno vas a tener que extender Membership para que cuando preguntes por User.IsInRole("XXX") realmente lo que que este preguntando sea "el permiso especifico", bueno opciones:

    • Puedes extender este metodo (son varios del proveedor) pero alli vas a tener que implementar todos los metodos
    • HAcer un metodo por separado (propio que no tenga nada que ver con membresia de ASP.NET) y que pregunte por los permisos del usuario actual
    • Extender el proveedor de Roles para en vez de obtener los Roles o Grupos del Usuario obtenas los Permisos

    Enlaces que te pueden ayudar

    BUeno espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    • Marcado como respuesta Erik Puentes jueves, 19 de febrero de 2015 14:39
    sábado, 14 de febrero de 2015 17:22
  • Erick,

    Desde la vista podrías hacer uso de

    @if (@Roles.IsUserInRole("USUARIO", "Admin"))
    {
      @Html.ActionLink(...)
    }

    O también podrías usar

    @if (@Roles.GetRolesForUser("USUARIO").FirstOrDeafult() == "Admin")
    {
      @Html.ActionLink(...)
    }

    Ahora, en el segundo caso devuelve todos los roles que tenga el usuario y ahí hay que tener cuidado. En caso tu esquema de seguridad contemple que un usuario sólo puede tener un rol, quizá está sea una buena opción

    -----------------------------------------------------------------------------------------------------
    Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.

    Willams Morales P.
    Arequipa - Perú



    • Editado Willams Morales martes, 23 de diciembre de 2014 16:33
    • Marcado como respuesta Erik Puentes viernes, 13 de febrero de 2015 16:36
    martes, 23 de diciembre de 2014 16:32
  • Tendrás que relacionar la tabla UserProfile con la tabla que tiene los accesos. De acuerdo a ello deberás mostrar u ocultar los @Ajax.ActionLink. Si decides hacer las restricciones a nivel de la vista recuerda que si tu escribes la ruta en la barra de direcciones de tu navegador nada podrá impedir que la vista se cargue. El atributo [Authorize] permitirá denegar el acceso, pero para ello deberás decorar tu método con ello y - espero no equivocarme - poco servirá que tengas en tu bd almacenado los accesos cuando el atributo lo haces manual.

    [Authorize(Users = "Juan, Marcos")]
    public ActionResult GetProductos()
    {
      Return View();
    }

    Muestra u oculta en la vista pero también utiliza el atributo [Authorize] para evitar el acceso desde la barra de direcciones de tu navegador.

    -----------------------------------------------------------------------------------------------------
    Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.

    Willams Morales P.
    Arequipa - Perú






    • Editado Willams Morales miércoles, 24 de diciembre de 2014 16:42
    • Marcado como respuesta Erik Puentes viernes, 13 de febrero de 2015 16:36
    miércoles, 24 de diciembre de 2014 16:37
  • Hola Erik Puentes
    (me sumo al post)

    Bueno... el tema es siempre asi como comentan tanto Williams, Leandro y Sergio
    En MVC siempre (generalmente diremos por ahora), siempre tenemos que hacer las dos partes

    • La logica de visualizar o no tal o cual "enlace, boton o lo que fuera" (o sea la UI)
    • Y la logica con el atributo AuthorizeAttribute que nos permite ingresar tanto roles como usuarios

    La configuracion ademas llega la parte autenticacion del web.config donde indicas que formulario tomara o redireccionara la app cuando no tenga las "credenciales validas o permisos adecuados"

    Algo asi

    ...	
    <system.web>
    ...
        <authentication mode="Forms">
            <forms loginUrl="~/Account/Login" timeout="20" />
        </authentication>
    ...
    </system.web>
    ...

    Esta configuracion en el web.config es para no estar haciendo esto? (te imaginas repetir este codigo en cada pagina o modulo o elemento?? (acuerdate del principio DRY - No te repitas je!)
    Ademas ya tiene la logica para el query de ReturnUrl

     if (!WebSecurity.IsAuthenticated) {
            Response.Redirect("~/Account/Login?returnUrl="
                + Request.Url.LocalPath);
        }

    Mas info sobre authentication...

    Bueno con eso estaria BASICAMENTE o GENERALMENTE pero que pasa

    1. Si queremos un esquema diferente de Permisos? Ya nos queda "corto" solo el esquema simple de Roles (Grupos de Usuarios) y Usuarios 
    2. Que pasa si queremos que tener varios login deferente para diferentes areas?
    3. Que pasa si queremos que la "verificacion del permiso" haga algo "especial"

    Bueno... 

    1. Si queremos un esquema diferente de Permisos? Ya nos queda "corto" solo el esquema simple de Roles (Grupos de Usuarios) y Usuarios 
      Aqui tendras que utilizar un equema nuevo (como lo mencionas mas arriba) como por ejemplo una tabla de Permisos. Incluso podrias tener tu propio esquema de seguridad utilizarlo
      Por ejemplo yo tengo sistemas legacy (de hace varios años) que viene utilizando sus sistemas de tablas de sgueridad/permisos y al tener app mvc... se tuvo que crear una capa de seguridad o tambien sobre escribir Membership de ASP.NET o utilizar el ahora Indentity FRamework (tambien claro el SimpleMemberhip) pero hay que evaluar cada caso y cual es para tu escenario
      Lo que te tiene que quedar en claro que a veces lo que propone ASP.NET non es los suficiente y debemos crear nuevos elementos o sobre escribir los existentes
      NOTA: INcluso podrias modificar todo y que internamente tus permisos funcionnen como los roles (asi es mas facil de codificar en MVC, ASP.NET y externamente tienes Usuarios, Roles y Permisos...) Algo asi tambien tengo en donde trabajo... pero ya es un framework propio de Membresia

      (podríamos ahondar mas... pero lo dejo aqui)
    2. Que pasa si queremos que tener varios login deferente para diferentes areas?
      Aqui si tenemos que sobreescribir authorize, y que haga primeramente que no tenga en cuenta la configurar del web.config porque alli se configura UN SOLO LOGIN... y si queremos varios? o diferentes por alguna logica o por ahora? debemos hacerlo "por codigo" y sobre escribir el sistema de autorizacion.
      NOTA: Tengo un post al respecto! asi que luego de año nuevo.. veo de publicarlo y que quede como ejemplo
    3. Que pasa si queremos que la "verificacion del permiso" haga algo "especial"...
      Idem al 2... sobreescribir el atributo authorize y alli 

    Lo que quieres es el punto 1 no? o el 2? Si entendi bien... tendrias que crear tus tablas y con los elementos ve la mejor forma de asignar o preguntar por estos permisos en cda parte que mencionamos 1 en la UI y 2 en cada Metodo de controlador
     

    ... espero que te sirva e ayuda o guia.
    Saludos


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    • Marcado como respuesta Erik Puentes viernes, 13 de febrero de 2015 16:35
    miércoles, 31 de diciembre de 2014 19:04

Todas las respuestas

  • Erick,

    Desde la vista podrías hacer uso de

    @if (@Roles.IsUserInRole("USUARIO", "Admin"))
    {
      @Html.ActionLink(...)
    }

    O también podrías usar

    @if (@Roles.GetRolesForUser("USUARIO").FirstOrDeafult() == "Admin")
    {
      @Html.ActionLink(...)
    }

    Ahora, en el segundo caso devuelve todos los roles que tenga el usuario y ahí hay que tener cuidado. En caso tu esquema de seguridad contemple que un usuario sólo puede tener un rol, quizá está sea una buena opción

    -----------------------------------------------------------------------------------------------------
    Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.

    Willams Morales P.
    Arequipa - Perú



    • Editado Willams Morales martes, 23 de diciembre de 2014 16:33
    • Marcado como respuesta Erik Puentes viernes, 13 de febrero de 2015 16:36
    martes, 23 de diciembre de 2014 16:32
  • Hola, Muchas gracias por tu ayuda.. pero veo que tu solucion contempla 2 soluciones, la ultima me parace mas correcta, En este momento entro como administrador y quiero quitarle al rol empleado esta vista.. como debo plantearla sugun tu consejo

    @model SifActivoFijo.Models.GN_EmpresaNivel2

    @{
        ViewBag.Title = "Create";

    }

    @using (Ajax.BeginForm("Create", "EmpresaNivel2", new AjaxOptions
    {
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "Resultado",
        OnSuccess = "$.fn.ParseFormValidation('createForm')"
    }, new { @id = "createForm", @name = "createForm" }))
    {

        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        <fieldset id="create">
            <legend></legend>
            <h2 style="font-weight:700">Nueva Sucursal</h2>
            <hr />
            <div class="separadores">
                <div class="flota">
                    <div class="editor-label">
                        @Html.Label("Codigo")
                    </div>
                    <div class="editor-field">
                        @Html.EditorFor(model => model.CodigoEmpresaNivel2)
                        @Html.ValidationMessageFor(model => model.CodigoEmpresaNivel2, "", new { @class = "validate" })
                    </div>
                </div>
                <div class="flota">
                    <div class="editor-label">
                        @Html.Label("Nombre")
                    </div>
                    <div class="editor-field">
                        @Html.EditorFor(model => model.NombreEmpresaNivel2)
                        @Html.ValidationMessageFor(model => model.NombreEmpresaNivel2, "", new { @class = "validate" })
                    </div>
                </div>
            </div>
            <div class="separadores">
                <div class="flota">
                    <div class="editor-label">
                        @Html.Label("Empresa")
                    </div>

                    <div class="editor-field">
                        @Html.DropDownList("GN_EmpresaNivel1_CodigoEmpresaNivel1", null, "seleccione", new { @class = "dropdown" })
                        @Html.ValidationMessageFor(model => model.GN_EmpresaNivel1_CodigoEmpresaNivel1, "", new { @class = "validate" })
                    </div>
                </div>
            </div>


    erikpugo

    martes, 23 de diciembre de 2014 20:39
  • Hola Erick, Imagino que está vista es lanzada desde un link u opción de menú. Es ahí donde dependiendo del rol muestras o no el enlace para cargar la vista. Puedes mostrar desde donde accedes a esta vista?
    martes, 23 de diciembre de 2014 21:15
  • >>En este momento entro como administrador y quiero quitarle al rol empleado esta vista

    es que a al vista no le quitas nada

    el acceso a una funcionalidad o no la das en dos lugares

    - como comento Willams mostrando o no el item de un menu segun el rol

    - definiendo el tag [Authorize] en el controlador, ya sea a nivel de clase o en los action

    Authorize attribute in ASP.NET MVC

    entonces aunque limites el itme de menu si el usuario escribe la url no podra acceder a esa funcionalidad

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 24 de diciembre de 2014 1:44
  • Leandro, tenía en mente recomendar el punto 2 donde haces mención al tag "[Authorize]" que como bien dices restringe el acceso incluso si se decide escribir la ruta en la barra de direcciones del browser.

    Pero, lo que no tenía claro es si esto es una solución complementaría al punto 1. Menciono esto ya que si por ejemplo tenemos disponible el acceso a una vista mediante un link y decoramos el action con el Tag [Authorize(Roles = "Admin")], al intentar acceder un usuario con rol no permitido se denegará el acceso y automáticamente se redireccionará a la página del login. Hay alguna manera de cambiar el comportamiento de [Authorize] cuando deniega el acceso? Quizá mandando sólo un alert o redireccionando a una página personalizada?.

    Quedo atento a tus comentarios que de hecho servirán también a Erick a tomar la decisión correcta.



    miércoles, 24 de diciembre de 2014 2:31
  • hola williams.mp, puedes crear para ello un "custom authorize attribute" para ello implementas un attribute que herede de AuthorizeAttribute.

    paramas ejemplos ver http://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    miércoles, 24 de diciembre de 2014 4:49
    Moderador
  • Muchas gracias Sergio, revisaré lo adjuntado.
    miércoles, 24 de diciembre de 2014 5:32
  • Gracias, ya comienzo con mi solución.. pero hasta medio día.. por que hoy es navidad .. Feliz navidad y muchas gracias.

    erikpugo

    miércoles, 24 de diciembre de 2014 15:55
  • si claro mira en el layout.. aqui esta mis vistas o modulos

    @{
        if (!WebSecurity.IsAuthenticated) {
            Response.Redirect("~/Account/Login?returnUrl="
                + Request.Url.LocalPath);
        }
       
    }

    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta charset="utf-8" />
        <title>SIF - ACTIVOS FIJOS</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;' name='viewport' />
        @Styles.Render("~/Content/themes/base/css")
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
        <header>
            <div id="pos">
                <div id="logo">
                    @Html.ActionLink("logo ", "Index", "Home",null, new {@class="lcol" })
                </div>
                   <section id="user">
                    @Html.Partial("_LoginPartial")
                </section>
            </div>
        </header>
        <nav>
            <section class="tabs">
                <input id="tab-1" type="radio" name="radio-set" class="tab-selector-1" onclick="radioCheck();" />
                <label for="tab-1" class="tab-label-1">Parametrizacion</label>
                <input id="tab-2" type="radio" name="radio-set" class="tab-selector-2" onclick="radioCheck();" />
                <label for="tab-2" class="tab-label-2">Procesos</label>
                <div class="content">
                    <div class="content-1">
                        @Ajax.ActionLink("G. Activos", "Index", "GrupoActivofijo", new AjaxOptions { UpdateTargetId = "wrapper" })
                        @Ajax.ActionLink("G. Contable", "Index", "GrupoContableAF", new AjaxOptions { UpdateTargetId = "wrapper" })
                        @Ajax.ActionLink("P. Contable", "Index", "PlanContable", new AjaxOptions { UpdateTargetId = "wrapper" })
                        @Ajax.ActionLink("Retiros", "Index", "ConceptoRetiroActivoFijo", new AjaxOptions { UpdateTargetId = "wrapper" })


    erikpugo

    miércoles, 24 de diciembre de 2014 15:59
  • sABE QUE SE ME VIENE A LA MENTE... por que no a travez de checkboox el administrador darle paso a la vistas al cualquier rol que se cree o a cada usuario en particular.

    eJEMPLO.. INGRESCO NORMAL COMO ADMIN

    EN MI VISTA USUARIOS ,ALLI TENGO UN CONTROLADOR Y VISTA LLAMADO PERMISOS... ALLI QUE PUEDA DARLE UNA OPCION DE CHULO A LOS CHECKBOX QUE NECESITO.

    MARCA checkboos

    PRODUCTO checkboos

    ....

    .

    .

    .

    y asi sucesivamente


    erikpugo

    miércoles, 24 de diciembre de 2014 16:24
  • Tendrás que relacionar la tabla UserProfile con la tabla que tiene los accesos. De acuerdo a ello deberás mostrar u ocultar los @Ajax.ActionLink. Si decides hacer las restricciones a nivel de la vista recuerda que si tu escribes la ruta en la barra de direcciones de tu navegador nada podrá impedir que la vista se cargue. El atributo [Authorize] permitirá denegar el acceso, pero para ello deberás decorar tu método con ello y - espero no equivocarme - poco servirá que tengas en tu bd almacenado los accesos cuando el atributo lo haces manual.

    [Authorize(Users = "Juan, Marcos")]
    public ActionResult GetProductos()
    {
      Return View();
    }

    Muestra u oculta en la vista pero también utiliza el atributo [Authorize] para evitar el acceso desde la barra de direcciones de tu navegador.

    -----------------------------------------------------------------------------------------------------
    Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.

    Willams Morales P.
    Arequipa - Perú






    • Editado Willams Morales miércoles, 24 de diciembre de 2014 16:42
    • Marcado como respuesta Erik Puentes viernes, 13 de febrero de 2015 16:36
    miércoles, 24 de diciembre de 2014 16:37
  • Hola Erik Puentes
    (me sumo al post)

    Bueno... el tema es siempre asi como comentan tanto Williams, Leandro y Sergio
    En MVC siempre (generalmente diremos por ahora), siempre tenemos que hacer las dos partes

    • La logica de visualizar o no tal o cual "enlace, boton o lo que fuera" (o sea la UI)
    • Y la logica con el atributo AuthorizeAttribute que nos permite ingresar tanto roles como usuarios

    La configuracion ademas llega la parte autenticacion del web.config donde indicas que formulario tomara o redireccionara la app cuando no tenga las "credenciales validas o permisos adecuados"

    Algo asi

    ...	
    <system.web>
    ...
        <authentication mode="Forms">
            <forms loginUrl="~/Account/Login" timeout="20" />
        </authentication>
    ...
    </system.web>
    ...

    Esta configuracion en el web.config es para no estar haciendo esto? (te imaginas repetir este codigo en cada pagina o modulo o elemento?? (acuerdate del principio DRY - No te repitas je!)
    Ademas ya tiene la logica para el query de ReturnUrl

     if (!WebSecurity.IsAuthenticated) {
            Response.Redirect("~/Account/Login?returnUrl="
                + Request.Url.LocalPath);
        }

    Mas info sobre authentication...

    Bueno con eso estaria BASICAMENTE o GENERALMENTE pero que pasa

    1. Si queremos un esquema diferente de Permisos? Ya nos queda "corto" solo el esquema simple de Roles (Grupos de Usuarios) y Usuarios 
    2. Que pasa si queremos que tener varios login deferente para diferentes areas?
    3. Que pasa si queremos que la "verificacion del permiso" haga algo "especial"

    Bueno... 

    1. Si queremos un esquema diferente de Permisos? Ya nos queda "corto" solo el esquema simple de Roles (Grupos de Usuarios) y Usuarios 
      Aqui tendras que utilizar un equema nuevo (como lo mencionas mas arriba) como por ejemplo una tabla de Permisos. Incluso podrias tener tu propio esquema de seguridad utilizarlo
      Por ejemplo yo tengo sistemas legacy (de hace varios años) que viene utilizando sus sistemas de tablas de sgueridad/permisos y al tener app mvc... se tuvo que crear una capa de seguridad o tambien sobre escribir Membership de ASP.NET o utilizar el ahora Indentity FRamework (tambien claro el SimpleMemberhip) pero hay que evaluar cada caso y cual es para tu escenario
      Lo que te tiene que quedar en claro que a veces lo que propone ASP.NET non es los suficiente y debemos crear nuevos elementos o sobre escribir los existentes
      NOTA: INcluso podrias modificar todo y que internamente tus permisos funcionnen como los roles (asi es mas facil de codificar en MVC, ASP.NET y externamente tienes Usuarios, Roles y Permisos...) Algo asi tambien tengo en donde trabajo... pero ya es un framework propio de Membresia

      (podríamos ahondar mas... pero lo dejo aqui)
    2. Que pasa si queremos que tener varios login deferente para diferentes areas?
      Aqui si tenemos que sobreescribir authorize, y que haga primeramente que no tenga en cuenta la configurar del web.config porque alli se configura UN SOLO LOGIN... y si queremos varios? o diferentes por alguna logica o por ahora? debemos hacerlo "por codigo" y sobre escribir el sistema de autorizacion.
      NOTA: Tengo un post al respecto! asi que luego de año nuevo.. veo de publicarlo y que quede como ejemplo
    3. Que pasa si queremos que la "verificacion del permiso" haga algo "especial"...
      Idem al 2... sobreescribir el atributo authorize y alli 

    Lo que quieres es el punto 1 no? o el 2? Si entendi bien... tendrias que crear tus tablas y con los elementos ve la mejor forma de asignar o preguntar por estos permisos en cda parte que mencionamos 1 en la UI y 2 en cada Metodo de controlador
     

    ... espero que te sirva e ayuda o guia.
    Saludos


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    • Marcado como respuesta Erik Puentes viernes, 13 de febrero de 2015 16:35
    miércoles, 31 de diciembre de 2014 19:04
  • Hola de nuevo yop, ya tengo los roles y a que usuario le asigo ese rol.. o.k todo funciona ahora autorizo ingresar a las vistas que necesita mis roles, hasta aqui perfecto, pero me puse a ensayar y que pasa si a travez del tiempo me piden que ese rol ya no tenga un permiso en especifico, me tocaria denegar el permiso desde el controlador,, esto significa recompilar la aplicacion y asi para la produccion cada vez que quieran cambiar un permiso.. por eso quiero que a travez de checkboos se autorize.

    erikpugo


    viernes, 13 de febrero de 2015 16:35
  • Hola

    Justamente lo que comentas es una "contra" del sistema de "membership & roles" que te propone .NET, pero lo puedes cambiar o extender.

    En mi caso particular ya teniamos una extension y en otras oportunidades un framework completo de "autenticacion y autorizacion" que basicamente es esto

    • Roles (= Grupos de usuarios)
    • Permisos (Permiso para un boton por ejemplo o accion particular) Este permiso no tiene nada que ver con los grupos o roles de usuario
    • La relacion NxN entre Roles y Permisos.

    Asi podras mapear los permisos a estas acciones particulares de tu app o conjunto de applicaciones y tener por separado los roles  (o grupos de usaurios) que poseen dichos permisos

    Con esto mas arriba podras "mapear" lo que preguntas

    PEro ahora otro inconveniente? como haces para "verificar el permiso"????

    Bueno vas a tener que extender Membership para que cuando preguntes por User.IsInRole("XXX") realmente lo que que este preguntando sea "el permiso especifico", bueno opciones:

    • Puedes extender este metodo (son varios del proveedor) pero alli vas a tener que implementar todos los metodos
    • HAcer un metodo por separado (propio que no tenga nada que ver con membresia de ASP.NET) y que pregunte por los permisos del usuario actual
    • Extender el proveedor de Roles para en vez de obtener los Roles o Grupos del Usuario obtenas los Permisos

    Enlaces que te pueden ayudar

    BUeno espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    • Marcado como respuesta Erik Puentes jueves, 19 de febrero de 2015 14:39
    sábado, 14 de febrero de 2015 17:22
  • Hola Jose.

    Tome la decision de irme por la parte de:

    [Authorize(Roles = "Administrator")]  para mis permisos, y deje unos perfiles cargados con unos permisos que me los dieron y es difícil modificarlos.. todo muy bien, me encontré con un nuevo desafió, cuando asigno un perfil a un usuario todo muy bien, pero cuando voy a cambiar el perfil queda guardado el anterior y el nuevo.. que hago?

    rol 2= coordinador

    rol 3 = empleado

    id usuario = 1

    idrol = 2

    cuando lo asigno pero cuando cambio el idrol:

    id usuario = 1

    idrol = 3

    y me sigue guardando

    idrol = 2

    queda con los dos roles cargados en la base de datos, y otra pregunta, como podria quitarle los permisos al usuario


    erikpugo

    jueves, 19 de febrero de 2015 14:39