2011-08-10 37 views
8

Usando el atributo Authorize, puedo especificar los roles que tienen permiso para acceder a los recursos.ASP.NET Authorize attribute and Admin user role

[Authorize(Roles="User")] 

Pero si tengo usuario de administración que se le permite ir a cualquier recurso que necesito especificar éste a su vez

[Authorize(Roles="User, Administrator")] 

Pero puede haber es de alguna manera lo que puedo decir de alguna manera que el administrador se deja ir a cualquier parte y no especificar este en el atributo Autorizar?

Así que quiero decir si en alguna parte del código (en el controlador o en la acción) sería [Authorize(Roles="User")] significa que la función de administrador también puede ir allí.

¿O puedo configurarlo para todos los roles Autorizar dinámicamente cómo al iniciar la aplicación?

¿Alguna idea?

ACTUALIZADO:

Actualmente tengo un controlador de administración con Autorizar atribuir [Authorize(Role="Administrator")] y tengo algunas acciones en algunos otros controladores con atributos [Authorize(Role="User")] así que tendrá que añadir "Administrator" allí también si yo no he encontrado una solución mejor .

+0

fue mi solución de ayuda? – LeftyX

Respuesta

2

Creo que esto funcionará para usted. Cree su propio controlador base, con AuthorizeAttribute, luego haga que sus otros controladores hereden su clase base.

[Authorize(Roles="Admin")] 
public class MyFancyController : Controller 
{ 
} 

[Authorize(Roles = "TaxPayer")] 
public class WizardController : MyFancyController 
{ 
... 

Esto es aterrador, en mi opinión.

¿Cuántos controladores/acciones tiene? ¿Qué sucede si te olvidas de esto más adelante y tal vez tienes una página a la que no quieres que accedan los administradores?

¿Será más difícil depurar el código?

+0

Creo que es un buen punto si en caso de que no quiera acceso de administrador en alguna parte. Pregunta actualizada – Joper

1

Puede crear un filtro personalizado y usarlo para decorar sus Acciones o Controladores con él. Se trata de una estructura simple que he usado mucho:

public class AuthorizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return; 
     } 

     var actionName = filterContext.ActionDescriptor.ActionName; 
     var controllerName = filterContext.Controller.GetType().Name; 

     bool isAuthorized =false; 

     // Put your logic here !!!! 

     if (!isAuthorized) { 
      filterContext.Result = new HttpUnauthorizedResult();   
      return; 
     } 
    } 
} 

Usted puede leer un poco más here

2
[Authorize(Roles = "User, Admin")] 
public class PrestamosController : Controller 
{ 
    // controller details 
} 
+0

Sería incluso mejor si explicara el código que publicó. –

0

Esto es lo que hago: hacer que los usuarios seguro que están en el "administrador" rol también están en el rol de "Usuario".

0

Necesita el concepto Static Role y Runtime Role.Aquí está un ejemplo sencillo:

Su lista de funciones y sus niveles:

  • Papel: admin | Nivel: 1
  • Rol: Editor | Nivel: 2
  • Rol: Visor | Nivel: 3

Usuarios y su papel estático (estático papel es el papel que ha asignado a los usuarios):

  • usuario: John | Rol: Admin
  • Usuario: Sam | Rol: Editor
  • Usuario: Peter | Rol: Visor

En tiempo de ejecución genera un Rol de tiempo de ejecución mediante el uso de roles estáticos y niveles de rol, los usuarios con mayor nivel de roles obtienen automáticamente los roles en los niveles inferiores. Entonces, después del cálculo, las funciones de tiempo de ejecución para estos usuarios serán:

  • Usuario: John | Rol: Administrador, Editor, Visor
  • Usuario: Sam | Rol: Editor, Visor
  • Usuario: Peter | Rol: Visor

Y luego, simplemente puede usar [Autorizar (Roles = "Visor")], los usuarios con mayor nivel de permisos (por ejemplo, John, Sam) también pueden acceder. Porque también deben tener el rol de Visor en tiempo de ejecución.

El punto de utilizar el rol estático y el rol de tiempo de ejecución es que el rol estático facilita la asignación de roles. Y la función de tiempo de ejecución facilita la autorización de los recursos.

Cuestiones relacionadas