Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理静态列表_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 处理静态列表

C# 处理静态列表,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我创建了一个权限对象,它存储用户ID、用户所在的组和用户权限。这是一门公共课 我还需要一个静态对象来存储这些权限对象的列表,如果管理更改了权限中的任何内容,所有更改都会立即应用于每个登录用户 我有几个问题: 我应该在第一个用户登录时创建此静态对象,还是应该在第一个用户登录前(例如,当我们在IIS上启动应用程序时)使用某种机制创建该列表 当特定用户注销时,是否可以轻松删除其项目列表 系统要求权限设置在管理员进行更改后立即生效 编辑1: public class permissionTemp {

我创建了一个权限对象,它存储用户ID、用户所在的组和用户权限。这是一门公共课

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

我有几个问题:

  • 我应该在第一个用户登录时创建此静态对象,还是应该在第一个用户登录前(例如,当我们在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类permissionTemp
    {
    公共静态Guid userGuid{get;set;}
    公共静态字符串[]grupos{get;set;}
    公共静态字符串[]权限{get;set;}
    }
    公共静态类安全
    {
    公共列表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
    

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

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

    单身人士:

    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
    

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

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


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

    首先,我建议避免创建用于存储此类敏感信息的静态对象,并且如果任何用户在关闭浏览器时未单击“注销”然后将不会删除该特定用户的对象

    不过,若您需要这样做以满足您的需求,您可以在应用程序首次启动时在Global.asax文件的application Start事件中的该对象中创建它

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

  • 您可以使用global.asax中的Application_Start方法在网站首次启动时运行一些代码。这将在处理第一个请求之前运行
  • 您可以使用global.asax中的Session_End方法从列表中删除该项。您还可以在执行FormsAuthentication.SignOut的同时执行此操作(如果您使用Forms身份验证)

  • 注意:我会使用一些锁定机制来防止多个用户同时访问列表。另一个存储列表的地方是WebCache。这是所有用户都使用的,因此,如果它由person x更新,则person y的下一次读取将是更新版本。

    您是否将这些权限保留在某个位置?权限对象是什么样子的?@MichaelPerrenoud刚刚更新了我的帖子,是的,权限在数据库中可能我不完全理解,但似乎您必须检查数据库,以获取用户发出的每个请求的权限;以确保权限没有被管理员修改,并且用户仍然被授权查看他/她刚才请求的页面。如果权限更改,也可以考虑自动记录用户。如果发生这种情况时他们正在使用该站点,系统将提示他们再次登录,然后可以加载新权限。可能会让用户感到恼火,具体取决于权限更改的频率。您是否将这些权限保留在某个位置?权限对象是什么样子的?@MichaelPerrenoud刚刚更新了我的帖子,是的,权限在数据库中可能我不完全理解,但似乎您必须检查数据库,以获取用户发出的每个请求的权限;以确保权限没有被管理员修改,并且用户仍然被授权查看他/她刚才请求的页面。如果权限更改,也可以考虑自动记录用户。如果发生这种情况时他们正在使用该站点,系统将提示他们再次登录,然后可以加载新权限。可能会让用户感到恼火,这取决于权限更改的频率。完美。。。这就是我要找的。从控件中读取此对象应该不难做到完美。。。这就是我要找的。从控件读取此对象应该不难