处理静态列表

时间:2013-03-01 12:26:03

标签: c# asp.net-mvc asp.net-mvc-4

我创建了一个权限对象,用于存储userId,用户所在的组和用户权限。这是一个公共类

我还需要一个静态对象来存储这些权限对象的列表,如果管理员更改权限中的任何内容,则所有更改都会立即应用于每个已记录的用户

我有几个问题:

  1. 我应该在第一个用户登录时创建此静态对象,还是应该在第一个用户登录之前使用该机制来创建该列表(例如,当我们在IIS上启动应用程序时)?
  2. 在注销时,是否可以轻松删除特定用户的项目列表?
  3. 这是系统要求,一旦管理员进行更改,权限设置就会生效。

    修改1:

    public class permissionTemp
    {
        public static Guid userGuid        { get; set; }
        public static string[] grupos      { get; set; }
        public static string[] permissoes  { get; set; }
    }
    
    
    public static class security
    {
        public List<permissionTemp> userPermissionSet { get; set; }
    }
    

3 个答案:

答案 0 :(得分:1)

考虑一个单身人士,所以你不必担心创作时间:

的Singleton:

public class Permission
{
   private Permission()
   { }      

   private static Permission _instance = null;
   public static Permission Instance
   {
      get
      {
         if(_instance == null)
         {
            _instance = new Permission();
         }
         return _instance
      }
}

现在您可以使用

访问同一个实例
Permission.Instance

在第一次访问时创建对象。因此,在私有构造函数中,您可以添加代码以读取数据库的权限。

答案 1 :(得分:1)

  1. 您可以使用global.asax中的Application_Start方法在网站首次启动时运行一些代码。这将在处理第一个请求之前运行。
  2. 您可以使用global.asax中的Session_End方法从列表中删除该项目。您也可以在执行FormsAuthentication.SignOut的同时执行此操作(如果使用表单身份验证)。
  3. 注意:我会使用一些锁定机制来防止多个同时访问列表。存储列表的另一个位置是WebCache。这是由所有用户使用的,因此如果由人x更新,则从y的读取将是更新版本。

答案 2 :(得分:0)

首先,我建议避免创建用于存储此类感知信息的静态对象,如果任何用户在未单击“注销”的情况下关闭浏览器,则不会删除该特定用户的对象。

如果您需要这样做以满足您的要求,您可以在应用程序第一次启动时在Global.asax文件上的Applciation Start Event中的该对象中创建它。