1

使用 ASP.NET MVC3 创建 Web 应用程序,基本框架包括 NHibernate (Fluent)、Ninject、Razor、Automapper、Jquery、Rhino-Security。

需要决定状态管理策略(会话和缓存级别)。我听说过以下缓存类型,

  1. 输出缓存
  2. 甜甜圈(孔)缓存
  3. 数据缓存

考虑到一般情况,我想了解在请求期间使用的状态管理策略,

登录

  1. 用户访问站点,仍然未经身份验证,因此通过 FormsAuth 模块重定向到登录页面(问题 - 由于登录页面不是特定于用户的,绝对是输出缓存的候选者。但是视图是由 MVC 逐字刷新的纯 HTML,所以任何好处通过使用缓存)

页面访问

  1. 当我使用 Rhino Security 时,导航取决于分配给单个用户的权限。每个用户可能都分配了特定的权限,大多数用户将拥有分配给该用户所属的 UseGroup 的权限。导航创建是一个两步过程 - 为用户获取权限集和生成导航 UI,所以这是我的两个 Q(问题 1 - 在每个页面访问时都需要当前用户的权限以进行操作授权以及导航创建,所以在哪里存储它 - 会话?问题 2 - 导航也可以为第一次访问的每个用户创建并存储在会话中,但我们知道它对于 UserGroup 中的每个用户都是相同的,除非给定特定的用户。因此,我们可以为特定权限集创建哈希,然后将导航保存到数据缓存使用 VarByCustom 在负责创建导航 UI 的子操作上启用输出缓存)

我看我太啰嗦了。事实上,我确实有更多问题,但让我先看看 smbdy 是否真的费心在这里阅读这么多废话

4

1 回答 1

0

关于用户权限,鉴于每个用户组的权限相同,我会将它们存储在缓存中,如下所示:

if (System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] == null)
{
    _Permissions = DAL.getPermissions("UserGroup1") as List<Permissions>;
    System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] = _Permissions;
}
else
{
    _Permissions = System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] as List<Permissions>;
}

这样,您只需第一次从 DB 中检索它们,因为它将存储在 HttpContext.Current.Cache 中。

于 2012-04-04T15:42:14.883 回答