Domanda

Sto cercando di assicurarsi un azione di controllo per evitare che un utente di accedere un'entità che non hanno accesso. Sono in grado di fare questo con il seguente codice.

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

Mi piacerebbe essere in grado di aggiungere un attributo al azione del controller stesso. Al fine di convalidare l'accesso al soggetto, ho bisogno di vedere quale valore è stato passato al controller e quali entità che l'utente ha accesso. È possibile?

[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
        //populate viewModel...
        return View(viewModel);
}
È stato utile?

Soluzione

Una cosa del genere potrebbe aiutare nel vostro cammino. Anche se si consiglia di aggiungere alcune proprietà aggiuntive per l'attributo per consentire di specificare il parametro entitycode su ogni azione, piuttosto che hard-code esso.

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();            
    }
}

Inoltre, se il entityCode non è nel vostro RouteData, è possibile utilizzare filterContext.RequestContext.HttpContext.Request a guardare i dati POST.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top