2012-04-26 28 views
6

Tengo una IU con Jquery que realiza una llamada a MVC utilizando la solicitud de Ajax.MVC Custom Authorize Atributo para validar la solicitud

Me gustaría validar cada solicitud en contra de userProfile (clase personalizada que contiene número de cuenta, ID, etc.).

¿Alguien podría sugerir si es posible crear un Autorizar atributo personalizado para validar que tanto la solicitud como el perfil de usuario son los mismos?

Después me gustaría hacer algo, como a continuación:

[AuthorizeUser] 
public ActionResult GetMyConsumption(string accountNumber) 
{ 
    ..... 
    return View(); 
} 
+0

Si usted está dispuesto a analizar los datos del formulario de solicitud/querystring y validarlos, entonces podría ser posible. Tendrás acceso completo al httpContext en tu atributo de autorización personalizado. Debería suponer que una variable "accountNumber" debe existir en el Formulario si un POST o QueryString es un GET. La vinculación de parámetros (datos de asignación en la solicitud de parámetros en su Acción) se realizará alrededor del método OnActionExecuting que es posterior a la Autorización. –

+0

Sí se transferirá el ID de cuenta. –

+1

Consulte http://stackoverflow.com/questions/6860686/extend-authorizeattribute-override-authorizecore-or-onauthorization (AuthorizeCore vs OnAuthorize) y aquí hay alguien que está buscando datos de algunas Solicitudes (presupuesto) para determinar algunos datos si el usuario está autorizado o no: http://stackoverflow.com/questions/5989100/asp-net-mvc-3-custom-authorisation –

Respuesta

17

Se puede escribir una costumbre Autorizar atributo:

public class AuthorizeUserAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (!isAuthorized) 
     { 
      // The user is not authorized => no need to continue 
      return false; 
     } 

     // At this stage we know that the user is authorized => we can fetch 
     // the username 
     string username = httpContext.User.Identity.Name; 

     // Now let's fetch the account number from the request 
     string account = httpContext.Request["accountNumber"]; 

     // All that's left is to verify if the current user is the owner 
     // of the account 
     return IsAccountOwner(username, account); 
    } 

    private bool IsAccountOwner(string username, string account) 
    { 
     // TODO: query the backend to perform the necessary verifications 
     throw new NotImplementedException(); 
    } 
} 
+0

Gracias @Darin Dimitrov –

Cuestiones relacionadas