2

我正在构建一个 ASP.Net MVC 4 应用程序。用户必须登录并根据数据库检查帐户。在这个数据库中,用户与一个或多个部门相关联。要求规定用户一次只能为一个部门使用该应用程序。

这意味着在成功登录后,我会检查用户链接到多少个部门。如果这只是一个,它将是活跃的部门。如果超过一个,我会要求用户选择其中一个,这个选择将是活动部门。此值必须在整个会话期间保持不变。

应用程序中有许多用例必须只授予对属于活动部门的数据的访问权限。这些限制应用于业务层,即不了解 ASP.Net 上下文的 C# 类库。

我怎样才能最好地坚持用户对活动部门的选择?我不太喜欢将它存储在数据库中的想法,因为它在会话之外不会持久。另一方面,在我的业务层中,我找不到任何开箱即用的持久性配置。我的 ASP.net 应用程序提供了一个 Session,但这些对于业务层来说是不可见的。

我是否应该将此值存储在 Session 中并使用 AuthenticateRequest 事件或类似的东西将活动部门传递给业务层?

有更好的选择吗?

4

2 回答 2

3

这些对于业务层来说是不可见的?你什么意思?

您实际上可以从类库访问您的会话。你所要做的就是参考System.Web

1) 在代码中导入命名空间

2)var sessionValue = HttpContext.Current.Session["ActiveDepartment"];

Alternatively, you can pass the ActiveDepartment to your business layer every time you need it instead of getting it from the session so you are not tied to a web application

于 2013-03-12T16:34:56.070 回答
2

存储活动部门可以在 Session 变量中完成:

Session["ActiveDepartment"] = 1

您的业​​务逻辑中不需要会话管理。围绕您的业务逻辑程序集编写一个包装器,该程序集需要提供给所有调用的 ActiveDepartmentID 才能有效。包装器始终返回由 ActiveDepartmentID 过滤的数据。

由于这是一个 MVC 应用程序,您还可以通过在所有 Controller 操作中要求 ActiveDepartmentID 在 Controller 级别强制执行此操作。

于 2013-03-12T16:34:36.987 回答