2010-01-14 36 views
6

Tal vez me estoy acercando a esto de la manera incorrecta y debería estar haciendo todo en filtros de acción, en cuyo caso, ¡apúnteme en la dirección correcta!ASP.NET MVC compruebe si el usuario pertenece al grupo [x]

Soy la creación de mi aplicación ASP.NET MVC para que la acción de un Índice de HomeController ofrece dos tipos diferentes de contenido, así:

if(Request.IsAuthenticated) 
    return View("IndexRegistered"); 
else 
    return View("IndexGuest"); 

Esto está muy bien, pero decir que quiero dividirlo en tres para que los miembros de administrador obtienen su propia página ...

if(Request.IsAuthenticated) 
{ 
    if(/* user is a member of administrators */) 
    return View("IndexAdministrator"); 
    else 
    return View("IndexCustomer"); 
} 
else 
    return View("IndexGuest"); 

¿Puede alguien me ilumine en cuanto a la pieza que falta en este rompecabezas?

Respuesta

20

Utilice la propiedad Roles del Autorizar Action Filter:

[Authorize(Roles="Administrators,Moderators")] 
public ActionResult SomeAction(){ 

} 

O utilice el User.IsInRole() método:

if(User.IsInRole("Administrator")) { ... } 
+0

http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/ –

+3

si (User.IsInRole ("Administrador")) era exactamente lo que necesitaba, ¡gracias! Aún está abierto para ingresar si hay una mejor manera de hacerlo. En la primera instancia de uso de Authorize, parece que sería una mejor manera para mí (aunque realmente no puedo entender por qué), salvo que lo entiendo, solo ofrece una condición de permiso/denegación, no múltiples condiciones, que es lo que busco – nathanchere

+0

Puede agregar múltiples roles a la propiedad Rol, actualizaré el código. –

2

Si nos fijamos en el proveedor de autenticación que sale de la caja de las plantillas de proyecto de MVC predeterminadas es fácil agregar su propio soporte de rol allí y rastrearlo en sesión, por lo que su código anterior se convertiría en:

if(Request.IsAuthenticated) 
{ 
    if(Session["Role"] == "Administrator") 
    return View("IndexAdministrator"); 
    else 
    return View("IndexCustomer"); 
} 
else 
    return View("IndexGuest"); 

y luego abre posibilidades como:

if(Request.IsAuthenticated) 
    return View("Index" + Session["Role"]); 
else 
    return View("IndexGuest"); 
Cuestiones relacionadas