我現在是這樣做的:一個權限表,保存窗體、按鈕、字段的權限,結構是
用戶、功能項(窗體、按鈕、字段的名字)、權限類型(int類型,窗體和按鈕隻有兩種權限類型:允許、拒絕。
字段有三種權限類型:隻讀、無權、可寫)
  界面的代碼如下:“新增”按鈕的權限 //用戶在某個窗體的權限列表。key為功能項名,如按鈕名稱。value為權限類型
          Hashtable hash = ttaad431mgr.GetHashtableByID(str_usid, this.Name);
           
          bool auth_AddNew = false;            if (hash.Contains("btnAddNew"))
            {
                int int_AddNew = (int)hash["btnAddNew"];                if (int_AddNew == (int)Common.PermisionFuntEnum.Permit)
                {
                    auth_AddNew = true;
                }
            }
            //IsEdit 是否編輯狀態
            btnAddNew.Enabled = IsEdit ? false : auth_AddNew;下面是字段的權限: int auth_nama = (int)Common.PermisionFildEnum.Reject;            if (hash.Contains("nama"))
            {
                auth_nama = (int)hash["nama"];
            }            labnama.Tag = auth_nama;//標簽保存權限類型,“復制”中使用                       if (auth_nama == (int)Common.PermisionFildEnum.ReadOnly)
            {
                txtnama.PasswordChar = Convert.ToChar(0);                txtnama.Enabled = true;                txtnama.ReadOnly = true;
            }
            else if (auth_nama == (int)Common.PermisionFildEnum.Reject)
            {
                txtnama.PasswordChar = ' ';
                txtnama.Enabled = false;
            }
            else
            {
                txtnama.PasswordChar = Convert.ToChar(0);                txtnama.Enabled = true;                txtnama.ReadOnly = !IsEdit;
            }

解决方案 »

  1.   

    我在“分析与设计”版也發了,引用1樓yfqvip的回復:这个权限控制很好.但是还是存在一些问题,最大的问题就是不灵活,楼主应该能体会到.
    1.可以把一些功能宏观化,这样就可以找出规律.例如增 删 改 查,这些都是可以归结到页面级,是否具有对A页面的浏览权限,如果有,那么是否有对数据的增 删 改 查等权限.等等.
    2.当然,对于个别特殊功能,是无法抽象出规律的,这个时候就要细化,而不论怎么细化都离不开增 删 改 查这些基本概念.具体功能具体做,这样的特出权限控制的地方应该不多.
    3.关于表的设计.这点可以说是最重要的.但是以目前楼主的设计来看,可扩展性几乎没有.主要的原因就是多用户问题,既然有权限控制,那么肯定是牵扯到多用户的.不同的用户对某个功能具有不同的权限,相同级别的用户对某个相同的功能也可能具有不同的权限,这些控制都是相当复杂的.而主要只能归结到表的设计问题上.
    这里可以设计表的关联,以数字映射编码的方式减少查询次数以及表的记录数.例如,可以添加一个权限字段,用来保存权限每个页面的权限编码,每个页面作为一条记录.
    1,1111 2,0001 例如这个编码,我们可以翻译成,级别为1的用户具有对这个页面的增 删 改 查权限.级别为2的用户具有对这个页面的查看权限.
    不多废话了,这个权限的问题,有些复杂,我只能说说自己的观点,具体设计还是要看楼楼主的.主要就是可扩展性.
      

  2.   

    确实比较麻烦的,初级权限是只有0,1 ,想要实现楼主的需求的话,需要在表中建立个String 然后对每个要实现权限的按钮窗体进行 0,1 判断,这样的话,每次需要用权限的时候,必须要去表里面截取字符串的第几个字符,然后判断是0,还是1。
    目前还没有发现更好的思路了。