Frage

Ich versuche, eine Controller-Aktion zu sichern einen Benutzer Zugriff auf eine Entity zu verhindern, dass sie keinen Zugang zu. Ich bin in der Lage dies mit dem folgenden Code zu tun.

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, sich selbst ein Attribut an die Controller-Aktion hinzuzufügen. Um den Zugriff auf die Einheit zu validieren, muss ich sehen, was Wert hat an die Steuerung weitergegeben wurden und welche Einheiten der Benutzer Zugriff hat. Ist das möglich?

[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
        //populate viewModel...
        return View(viewModel);
}
War es hilfreich?

Lösung

So etwas könnten Sie auf Ihrem Weg helfen. Obwohl Sie einige zusätzliche Eigenschaften zu Ihrem Attribut hinzufügen möchten, damit Sie Ihre EntityCode Parameter auf jede Aktion spezifizieren, anstatt hart Code es.

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 sind, Sie filterContext.RequestContext.HttpContext.Request zu Blick auf den POST-Daten verwenden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top