处理静态列表

本文关键字:列表 静态 处理 | 更新日期: 2023-09-27 18:01:38

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

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

我有几个问题:

    我应该在第一个用户登录时创建这个静态对象,还是应该在第一个用户登录之前使用一种机制来创建该列表(例如,当我们在IIS上启动应用程序时)?
  1. 当一个特定的用户注销时,是否很容易删除项目列表?

这是一个系统要求,权限设置在管理员修改后立即生效。

编辑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; }
}

处理静态列表

考虑单例,这样您就不用担心创建时间:

单:

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. 你可以使用Application_Start方法在全局。Asax在网站第一次启动时运行一些代码。这将在处理第一个请求之前运行。
  2. 您可以在全局中使用Session_End方法。从列表中删除项目。你也可以在执行FormsAuthentication的同时做。SignOut(如果你使用Forms Authentication).

注意:我将使用一些锁定机制来防止多个同时访问列表。存储列表的另一个地方是在WebCache中。这被所有用户使用,所以如果person x更新了它,那么下一次从person y读取的将是更新的版本。

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

如果你需要这样做来满足你的需求,你可以在全局的应用程序启动事件中创建它。