处理静态列表
本文关键字:列表 静态 处理 | 更新日期: 2023-09-27 18:01:38
我已经创建了一个权限对象,该对象存储userId,用户所在的组和用户的权限。这是一个公共类
我还需要一个静态对象来存储这些权限对象的列表,如果管理更改了权限中的任何内容,所有更改将立即应用于每个登录用户
我有几个问题:
- 我应该在第一个用户登录时创建这个静态对象,还是应该在第一个用户登录之前使用一种机制来创建该列表(例如,当我们在IIS上启动应用程序时)?
- 当一个特定的用户注销时,是否很容易删除项目列表?
这是一个系统要求,权限设置在管理员修改后立即生效。
编辑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
对象在第一次访问时创建。因此,在私有构造函数中,您可以添加代码来读取数据库的权限。
- 你可以使用Application_Start方法在全局。Asax在网站第一次启动时运行一些代码。这将在处理第一个请求之前运行。
- 您可以在全局中使用Session_End方法。从列表中删除项目。你也可以在执行FormsAuthentication的同时做。SignOut(如果你使用Forms Authentication).
注意:我将使用一些锁定机制来防止多个同时访问列表。存储列表的另一个地方是在WebCache中。这被所有用户使用,所以如果person x更新了它,那么下一次从person y读取的将是更新的版本。
首先,我建议避免创建静态对象来存储此类敏感信息,并且如果任何用户在未单击"注销"的情况下关闭浏览器,则该对象将不会为该特定用户删除。
如果你需要这样做来满足你的需求,你可以在全局的应用程序启动事件中创建它。