在实体

时间:2017-06-29 17:54:27

标签: asp.net-mvc architecture action-filter

我有一个包含许多实体的网站,所有这些实体都链接到公司。登录到网站的用户也有一个链接公司,因此,他只看到与其公司相关联的实体。此外,还有一个管理员,他可以与所有公司合作,他选择一家公司,然后像简单的用户一样在网站内导航。我认为将公司ID传递给选择实体的最佳方法是什么。当然,我可以将CompanyId添加到每个控制器中的每个方法:

    public async Task<ActionResult> Index(int? CompanyId)
    {
         //.....
    }

并像这样创建Action Filter:

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,但可能它是一种更有效和灵活的方式?

1 个答案:

答案 0 :(得分:0)

由于CompanyID与用户相关联,如果您使用任何最新的asp.net技术,只需添加CompanyId作为用户的声明(声​​明应该可用)。

An Introduction to Claims

Access Claim values in controller in MVC 5