2012-03-01 14 views
6

Estoy creando mi propio atributo de autorización personalizado, anulando el método AuthorizeCore y quería saber si es posible acceder a las funciones que se pasaron a la etiqueta de autorización del atributo.Acceso a roles desde el atributo de autorizar personalizado

Así por ejemplo, si tengo esto:

[CustomAuthorize(Roles = "Administrator, Sales, Entry")] 

¿Es posible acceder a ellos desde el interior aquí:

protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
    } 

entonces podría dividir la cadena y crear una matriz.

+0

vistazo a aquí http://stackoverflow.com/a/9479442/745331 – Yorgo

Respuesta

9

Puede this.Roles que es una cadena que debe dividir.

El código fuente está disponible gratuitamente.

La aplicación AuthorizeCore defecto:

protected virtual bool AuthorizeCore(HttpContextBase httpContext) { 
    if (httpContext == null) { 
     throw new ArgumentNullException("httpContext"); 
    } 

    IPrincipal user = httpContext.User; 
    if (!user.Identity.IsAuthenticated) { 
     return false; 
    } 

    if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) { 
     return false; 
    } 

    if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) { 
     return false; 
    } 

    return true; 
} 

Y tienen una función de división interna que se parece a esto:

internal static string[] SplitString(string original) { 
    if (String.IsNullOrEmpty(original)) { 
     return new string[0]; 
    } 

    var split = from piece in original.Split(',') 
       let trimmed = piece.Trim() 
       where !String.IsNullOrEmpty(trimmed) 
       select trimmed; 
    return split.ToArray(); 
} 
Cuestiones relacionadas