winform 设计权限问题

maocheng82 2016-05-12 10:54:22
我之前写了个进销存系统 采用的是BS 每个用户权限都存储在缓存表里 每次打开页面 直接通过缓存表取查询 以免每次打开页面都要跟数据库打交道 而WINFORM 好像没缓存这个说法了 那判断权限如何设计呢 谢谢
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2016-05-13
  • 打赏
  • 举报
回复
引用 5 楼 maocheng82 的回复:
[quote=引用 4 楼 lovelj2012 的回复:] 1、对于一些菜单类权限,这种就是常见的角色权限控制(员工有角色,角色对应权限即可见菜单)。登录加载主窗体的时候,对应可见菜单都是一次性load好的。 2、对于一些特殊权限点,比如打开某个模块是否具备审批权限(审批按钮是否可见),针对winform,这种可以采用客户端缓存的方式进行判断。所谓客户端缓存,也就是维持一个静态的数据结构(比如List<用户权限>),用的时候直接从这个静态的变量中去取。
恩 我想问哈 那这个List<用户权限>, 给这个变量赋值肯定是要跟数据库打交道 那客户端每次引用这个值的时候 即每次都要调用这个方法?????[/quote] 这个玩意是一次性load的时候,用的时候是对静态变量的检索,不会重复和数据打交道直到下次重新登录(客户端缓存是针对一些常用但是不经常发生变化的玩意)

public class ClientCach
{
private static Hashtable hs = new Hashtable();

        /// <summary>
        /// 添加缓存表
        /// </summary>
        private static void AddCache()
        {
            //用户特殊权限点
            hs.Add("UserAuth", 和数据打交道的方法);
        }

/// <summary>
        /// 获取缓存数据
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        private static object GetCache(string key)
        {
            if (hs[key] == null)
            {
                hs.Clear();
                AddCache();
            }
            return hs[key];
        }

       // <summary>
        /// 获取用户权限
        /// </summary>
        /// <param name="BelongID">用户帐号</param>
        /// <returns></returns>
        public static List<ENT_UserAuth> GetUserAuthList(string Account)
        {
            var lst = GetCache("UserAuth") as List<ENT_UserAuth>;
            List<ENT_UserAuth> lstAuth = lst.FindAll(delegate(ENT_UserAuthent) { return ent.字段名称== Account; });
            return lstAuth ;
        }
}
software_artisan 2016-05-13
  • 打赏
  • 举报
回复
客户端登录的时候从服务端获取一次登录用户的权限就行了,这个数据结构放到主窗体的静态字段里面就好。
maocheng82 2016-05-13
  • 打赏
  • 举报
回复
引用 4 楼 lovelj2012 的回复:
1、对于一些菜单类权限,这种就是常见的角色权限控制(员工有角色,角色对应权限即可见菜单)。登录加载主窗体的时候,对应可见菜单都是一次性load好的。 2、对于一些特殊权限点,比如打开某个模块是否具备审批权限(审批按钮是否可见),针对winform,这种可以采用客户端缓存的方式进行判断。所谓客户端缓存,也就是维持一个静态的数据结构(比如List<用户权限>),用的时候直接从这个静态的变量中去取。
恩 我想问哈 那这个List<用户权限>, 给这个变量赋值肯定是要跟数据库打交道 那客户端每次引用这个值的时候 即每次都要调用这个方法?????
江南小鱼 2016-05-13
  • 打赏
  • 举报
回复
1、对于一些菜单类权限,这种就是常见的角色权限控制(员工有角色,角色对应权限即可见菜单)。登录加载主窗体的时候,对应可见菜单都是一次性load好的。 2、对于一些特殊权限点,比如打开某个模块是否具备审批权限(审批按钮是否可见),针对winform,这种可以采用客户端缓存的方式进行判断。所谓客户端缓存,也就是维持一个静态的数据结构(比如List<用户权限>),用的时候直接从这个静态的变量中去取。
maocheng82 2016-05-13
  • 打赏
  • 举报
回复
[quote=引用 2 楼 caozhy 的回复:] 我只有理解的 ,定义一个静态类,里面放全局变量,List<User> ListUser 给这个全局变量赋值的时候 那肯定也是跟数据库打交道 。 假设方法是 public List<User> fangfa(){........} 那客户端引用这个变量的时候 即也就调用这个方法,那防止客户端每次打开新窗口都要调用这个方法 是不是还要上加一个条件 if( 静态类..ListUser.Count==0) x=静态类.fangfa() ;else x= 静态类.ListUser
threenewbee 2016-05-12
  • 打赏
  • 举报
回复
定义一个静态类,里面放全局变量,List<T>保存
我是飞云 2016-05-12
  • 打赏
  • 举报
回复
只要保证生命周期内不会被清除就可以了,方法很多,看需求。 如果一定要用缓存可以看看MemoryCache(4.0)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧