2012-06-08 7 views
5

Estoy usando MVC3/4. Pero es solo una pregunta general en autorización.Cómo escribir AuthorizeAttribute si un rol contiene espacio

Una de las funciones que tengo se llama "Trip Leader" en la base de datos, que contiene un espacio.

Intenté [Authorize(Roles="'Trip Leader', Administrator")] pero no funcionó. ¿Alguien puede ayudar?

+0

intentar hacer una constante cuyo valor es "Trip Leader"? – Charmander

+0

¿Cómo? '[Authorize (Roles = TripLeader," Administrator ")]'? No funcionará – Blaise

+0

@Blaise ¿Has logrado hacer esto? – horgh

Respuesta

3

Cree su propio atributo y proceda de AuthorizeAttribute. A continuación, anule el método AuthorizeCore e implemente su propia lógica con validación en un rol que contenga un espacio.

Un ejemplo podría ser algo como esto:

public class CustomAuthAttribute : AuthorizeAttribute 
{ 
    private readonly IUserRoleService _userRoleService; 
    private string[] _allowedRoles; 

    public CustomAuthAttribute(params string[] roles) 
    { 
     _userRoleService = new UserRoleService(); 
     _allowedRoles = roles; 
    } 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
    //something like this. 
    var userName = httpContext.User.Identity.Name; 
    var userRoles = _userRoleService .GetUserRoles(userName); // return list of strings 
    return _allowedRoles.Any(x => userRoles.Contains(x)); 
    } 

}

Uso

[CustomAuth("role withspace","admin")] 
public ActionResult Index() 
{ 
} 
+0

¡Agradable! Gracias. – Blaise

+0

¡Bienvenido, contento de ayudar! –

0

Prueba esto:

[Authorize(Roles="Trip Leader")] 
[Authorize(Roles="Administrator")] 

EDIT: El código anterior requiere el usuario para cumplir ambas funciones. Si busca una autorización de "y/o", intente esto:

[Authorize(Roles="Trip Leader, Administrator")] 
+1

¡Oye, no funcionará! – Blaise

+0

Parece que no puede poner múltiples atributos Autorizar en la misma clase o función. Puede tener diferentes en la clase y la función que parece formar un AND mientras que la coma forma un OR. –

Cuestiones relacionadas