0

我创建了一个权限对象,该对象存储 userId、用户所在的组和用户的权限。这是公开课

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

我有一些问题:

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

这是一项系统要求,即权限设置在管理员进行更改后立即生效。

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

3 回答 3

2

考虑一个单例,所以你不用担心创建时间:

单身人士:

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

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

于 2013-03-01T12:36:35.527 回答
1
  1. 您可以使用 global.asax 中的 Application_Start 方法在网站第一次启动时运行一些代码。这将在处理第一个请求之前运行。
  2. 您可以使用 global.asax 中的 Session_End 方法从列表中删除该项目。您也可以在执行 FormsAuthentication.SignOut 的同时执行此操作(如果您使用表单身份验证)。

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

于 2013-03-01T14:02:12.457 回答
0

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

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

于 2013-03-01T12:37:15.470 回答