【发布时间】:2017-06-29 17:54:27
【问题描述】:
我有一个包含许多实体的网站,所有这些实体都与公司相关联。登录到站点的用户也有一个链接的公司,因此,他只看到与他的公司链接的实体。此外,还有一个管理员,可以与所有公司合作,他选择一家公司,然后像简单用户一样在网站内导航。我认为将这个公司 ID 传递给选择实体的最佳方式是什么。当然,我可以在每个控制器的每个方法中添加 CompanyId:
public async Task<ActionResult> Index(int? CompanyId)
{
//.....
}
并像这样创建动作过滤器:
public class CompanyIdValueActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.User.IsInRole("Superadmin") && filterContext.HttpContext.Request["CompanyId"] != null)
{
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
else
base.OnActionExecuting(filterContext);
}
}
并通过该属性标记每个方法并添加到每个链接参数CompanyId,但也许它可以是更有效和灵活的方式?
【问题讨论】:
标签: asp.net-mvc architecture action-filter