我有一个包含许多实体的网站,所有这些实体都链接到公司。登录到网站的用户也有一个链接公司,因此,他只看到与其公司相关联的实体。此外,还有一个管理员,他可以与所有公司合作,他选择一家公司,然后像简单的用户一样在网站内导航。我认为将公司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,但可能它是一种更有效和灵活的方式?
答案 0 :(得分:0)
由于CompanyID与用户相关联,如果您使用任何最新的asp.net技术,只需添加CompanyId作为用户的声明(声明应该可用)。