我現在是這樣做的:一個權限表,保存窗體、按鈕、字段的權限,結構是
用戶、功能項(窗體、按鈕、字段的名字)、權限類型(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;
}
用戶、功能項(窗體、按鈕、字段的名字)、權限類型(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.可以把一些功能宏观化,这样就可以找出规律.例如增 删 改 查,这些都是可以归结到页面级,是否具有对A页面的浏览权限,如果有,那么是否有对数据的增 删 改 查等权限.等等.
2.当然,对于个别特殊功能,是无法抽象出规律的,这个时候就要细化,而不论怎么细化都离不开增 删 改 查这些基本概念.具体功能具体做,这样的特出权限控制的地方应该不多.
3.关于表的设计.这点可以说是最重要的.但是以目前楼主的设计来看,可扩展性几乎没有.主要的原因就是多用户问题,既然有权限控制,那么肯定是牵扯到多用户的.不同的用户对某个功能具有不同的权限,相同级别的用户对某个相同的功能也可能具有不同的权限,这些控制都是相当复杂的.而主要只能归结到表的设计问题上.
这里可以设计表的关联,以数字映射编码的方式减少查询次数以及表的记录数.例如,可以添加一个权限字段,用来保存权限每个页面的权限编码,每个页面作为一条记录.
1,1111 2,0001 例如这个编码,我们可以翻译成,级别为1的用户具有对这个页面的增 删 改 查权限.级别为2的用户具有对这个页面的查看权限.
不多废话了,这个权限的问题,有些复杂,我只能说说自己的观点,具体设计还是要看楼楼主的.主要就是可扩展性.
目前还没有发现更好的思路了。