2012-08-29 34 views
6

Estoy usando el administrador de roles y la autenticación de Windows para mi proyecto asp.net mvc tenemos 2 roles que son visores y editores.Asp.net MVC administrador de roles

<authentication mode="Windows" /> 
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"> 
     <providers> 
      <clear /> 
      <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 

Editor puede acceder a toda la aplicación, pero Visor sólo se puede acceder a dos acciones

Probé primero en poner atributo Autorizar para el controlador de base que acaba de permitir editor para acceder a todo:

[Authorize(Roles = "Editors")] 
public class BaseController : Controller 

y a continuación, agregue el atributo Autorizar a esas dos acciones:

[Authorize(Roles = "Viewers,Editors")] 
public ActionResult Report(PaymentsUnallocatedAndQueriedModel model) 

no funciona, no permite al espectador acceder a ninguna acción que tenga sentido ahora.

Creo que no es una buena idea repetir el atributo Autorizar en la parte superior de cada acción.

¿Me podría decir si hay una mejor solución a ese

Respuesta

5

Tienes que ver esto desde el punto de vista de árbol. Para llegar a una acción, primero debe poder acceder a un controlador. En este caso, ha restringido el controlador al grupo Editores, por lo que los espectadores ni siquiera pueden llegar tan lejos. Lo que probablemente sería más útil sería restringir el controlador a Viewers, Editors y luego, en las acciones que requieren permiso del Editor, especifíquelas. Esto generará atributos redundantes, pero considere el costo del código si tuviera que restringir manualmente cada acción en función de la membresía del rol.

[Authorize(Roles = "Viewers, Editors")] 
public class BaseController : Controller 
{ 

    [Authorize(Roles = "Editors")] 
    public ActionResult EditReport(PaymentsUnallocatedAndQueriedModel model) 
    { 
     // Some editor only functionality 
    } 

    public ActionResult Report(PaymentsUnallocatedAndQueriedModel model) 
    { 
     // Some functionality for both. No attribute needed 
    } 
} 
+0

Gracias por su respuesta, esperaba que no se repita autorizar en la parte superior de cada acción, porque los editores pueden acceder a todos los actos, pero parece que no hay otra manera – Elham

+0

@Elham: Siempre se puede mirar este SO pregunta e implementa un atributo deny. Esto parece mucho trabajo simplemente porque no quiere escribir un atributo para un método. http://stackoverflow.com/questions/4011458/mvc-authorize-attribute-deny –

Cuestiones relacionadas