2012-04-26 17 views
6

Mam interfejs użytkownika z Jquery, który wykonuje połączenie z MVC za pomocą żądania Ajax.MVC Custom Authorize Atrybut do sprawdzania poprawności żądania

Chciałbym sprawdzić każde żądanie względem userProfile (klasa niestandardowa, która zawiera numer konta, identyfikator itp.).

Czy ktoś mógłby zasugerować, czy możliwe jest utworzenie niestandardowego atrybutu autoryzacji w celu sprawdzenia, czy zarówno żądanie, jak i profil użytkownika są takie same?

bym wtedy zrobić coś jak poniżej:

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

Jeśli jesteś gotów do analizowania danych z formularza zapytania/zapytanie o kwerendę i sprawdzenie poprawności, może to być możliwe. Będziesz mieć pełny dostęp do httpContext w swoim niestandardowym atrybucie autoryzacji. Musiałbyś założyć, że zmienna "accountNumber" musi istnieć w formularzu, jeśli POST lub QueryString jeśli GET. Powiązanie parametrów (mapowanie danych w żądaniu do parametrów w twojej Akcji) nastąpi wokół metody OnActionExecuting, która jest po autoryzacji. –

+0

Tak, identyfikator konta zostanie przekazany. –

+1

Sprawdź http://stackoverflow.com/questions/6860686/extend-authorizeattribute-override-authorizecore-or-onauthorization (AuthorizeCore vs OnAuthorize) i tutaj jest ktoś, kto patrzy na niektóre dane żądania (budżet) dla niektórych danych w celu ustalenia jeśli użytkownik jest autoryzowany lub nie: http://stackoverflow.com/questions/5989100/asp-net-mvc-3-custom-authorisation –

Odpowiedz

17

można napisać niestandardowy Autoryzacja atrybut:

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

Dziękuję @Darin Dimitrov –

Powiązane problemy