我正在构建一个ASP.Net MVC 4应用程序。用户必须登录并根据数据库检查帐户。在此数据库中,用户与一个或多个部门相关联。要求声明用户一次只能将应用程序用于一个部门。
这意味着在成功登录后,我会检查用户链接的部门数量。如果这只是一个,它将是活跃的部门。如果它不止一个,我会要求用户选择其中一个,这个选择将是活动部门。该值必须在整个会话期间保持不变。
应用程序中有许多用例只能访问属于活动部门的数据。这些限制应用于业务层,即不了解ASP.Net上下文的C#类库。
我怎样才能最好地保留用户对活动部门的选择?我不喜欢将它存储在de数据库中的想法,因为它不会在会话之外持久存在。另一方面,在我的业务层中,我找不到任何开箱即用的持久性配置。我的ASP.net应用程序提供了一个Session,但这些对于业务层是不可见的。
我是否应该将此值存储在会话中并使用AuthenticateRequest事件或类似内容将活动部门传递给业务层?
有更好的选择吗?
答案 0 :(得分:3)
这些对于业务层是不可见的?你的意思是什么?
您实际上可以从类库中访问您的会话。你要做的是参考System.Web
然后:
1)在代码中导入命名空间
2)var sessionValue = HttpContext.Current.Session["ActiveDepartment"];
或者,您可以在每次需要时将ActiveDepartment
传递到您的业务层,而不是从会话中获取,因此您不依赖于Web应用程序
答案 1 :(得分:2)
存储活动部门可以在会话变量中完成:
Session["ActiveDepartment"] = 1
您的业务逻辑中不需要会话管理。在业务逻辑程序集周围编写一个包装器,需要为所有调用提供ActiveDepartmentID才能生效。包装器始终返回由ActiveDepartmentID筛选的数据。
由于这是一个MVC应用程序,您还可以在Controller级别通过在所有Controller操作中要求ActiveDepartmentID来强制执行此操作。