我正在尝试确保 Controller 操作的安全性,以防止用户访问他们无权访问的实体。我可以使用以下代码来做到这一点。

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

我希望能够向 Controller Action 本身添加一个属性。为了验证对实体的访问,我需要查看已将什么值传递给 Controller ​​以及用户有权访问哪些实体。这可能吗?
[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
        //populate viewModel...
        return View(viewModel);
}

最佳答案

这样的事情可能会对您有所帮助。尽管您可能希望向属性添加一些其他属性,以允许您在每个操作上指定您的entityCode参数,而不是对其进行硬编码。

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

另外,如果entityCode不在RouteData中,则可以使用filterContext.RequestContext.HttpContext.Request查看POST数据。

09-05 05:17