6

Ich versuche eine Controller-Aktion zu sichern, um zu verhindern, dass ein Benutzer auf eine Entität zugreift, auf die er keinen Zugriff hat. Ich kann dies mit dem folgenden Code tun.Wie Verwenden von Custom AuthorizeAttribute für Controller, der Parameterwert verwendet?

public ActionResult Entity(string entityCode) 
{ 
    if (CurrentUser.VerifyEntityPermission(entityCode)) 
    { 
     //populate viewModel... 
     return View(viewModel); 
    } 
    return RedirectToAction("NoAccessToEntity", "Error"); 
} 

Ich möchte in der Lage sein, ein Attribut der Controller-Aktion selbst hinzuzufügen. Um den Zugriff auf die Entität zu validieren, muss ich sehen, welcher Wert an den Controller übergeben wurde und auf welche Entitäten der Benutzer Zugriff hat. Ist das möglich?

[EntityAuthRequired] 
public ActionResult Entity(string entityCode) 
{ 
     //populate viewModel... 
     return View(viewModel); 
} 
+0

Wie Sie das getan – Dragon

Antwort

3

So etwas könnte Ihnen auf Ihrem Weg helfen. Möglicherweise möchten Sie Ihrem Attribut einige zusätzliche Eigenschaften hinzufügen, damit Sie Ihren entityCode-Parameter für jede Aktion angeben können, anstatt es hart zu codieren.

public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //Make sure that this is not NULL before assigning value as string... 
     var entityCode = filterContext.RouteData.Values["entityCode"] as string; 
     // do your logic...   
     if (!allowed) 
      filterContext.Result = new HttpUnauthorizedResult();    
    } 
} 

Auch wenn die entityCode nicht in Ihrem Routedata ist, können Sie filterContext.RequestContext.HttpContext.Request an den POST-Daten zu suchen verwenden.

+0

, wie Controller JSON-Werte in AuthorizeAttribute.and in AuthorizeRequest-Methode zu erhalten – Dragon

Verwandte Themen