国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

權限設計問題,即C#實現上的設想[供討論]

2024-07-21 02:19:04
字體:
來源:轉載
供稿:網友


現在的程序,很多涉及到權限這個管理問題。一稍大和政務或商務軟件都會涉及許多的權限,如管理、發表、瀏覽、收發公告等權限。
對這個問題,在數據庫上怎樣實現才好呢?
我下載了一些軟件,它們在數據庫上實現是用字段,即每一權限設置為1個boolean或byte的字段。我分析了這種設計,優點是讀取方便,如要知道某一權限,只要得到某個字段就可以了,不需要很多的程序來判斷。
但這種設計的缺點是:1、在維護中,需要增加或修改權限,就需要修改數據庫;2、如果貪其方便,很可能會在程序很多地方用到判斷一個權限的語句。如果權限改變或取消后,會在很多的地方修改代碼;3、字段很長,如果有幾十種權即的話,會較麻煩。

聽取朋友建議后,考慮用一個字段,用01來表示是否擁有該權限,權限按位設置:100100101110110,每位代表一種權限。
考慮以后的升級等需要,應設置一些預留位。比如一家公司需要40種權限,在設計時就用100位的字串來表示,如:
·管理員: 需要12種,設置前20位
·發表文章:需要20種,設置30位
·工作權限:需要20種,設置30位
......
沒有用到的權限位全部設為0,這樣我們可以來解碼了。

不細說這位數怎樣記錄,這在用戶管理中還是比較方便的。我主要想說一下如何讀?。?br>
這10011011101......太難讀懂了,好象是個機械,一點沒人味,我就想給它增加些人味

好在這c#比以前用asp強太多了,就想到了用枚舉、結構,用類的封裝。該類的封裝核心應該是讀取和解碼

首先用個enum來列舉一下這個權限,也就是給每個位(權限)取個好聽的名字:

enum personpurview {isadmin, managemember, managearticle, ......,
managepreset1, managepreset2, ......,
articlesend, articleview, .....,
articlepreset1, articlepreset2, ......};

當然你可以用結構,但我發覺用枚舉似乎更方便。比如我們從數據庫中已經讀取了權限字段,并用strpurview來表示這個權限變量。
這樣就可以先寫判斷權限的函數了:
下面很重要,但很簡單:

// 判斷擁有某種權限的函數
public bool haspurview(personpurview, purview)
{
if ( srtpurview.substring(covert.toint32(purview), 1) == "1" )
{
return true;
}
else
{
return false;
}
}

這樣就可用這個函數來判斷了,比如相判斷文章發表權(articlesend)

if ( haspurview(personpurview.articlesend) )
{
......;
}

怎么樣,你看清楚了吧。

最后,我這還是設想,還沒付諸行動。我也想把它作為一個問題供各位討論,我覺得一個程序好的設計比好的代碼更重要。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清丰县| 屏南县| 徐汇区| 淄博市| 连山| 衡水市| 阿克苏市| 达拉特旗| 泸州市| 芜湖市| 澄城县| 玉龙| 方山县| 永定县| 石泉县| 西吉县| 噶尔县| 嘉鱼县| 通榆县| 元朗区| 南充市| 榕江县| 通州市| 富源县| 新巴尔虎左旗| 玉林市| 尖扎县| 汉沽区| 霍山县| 漳州市| 漠河县| 莒南县| 东港市| 久治县| 永州市| 北票市| 安远县| 从化市| 江川县| 从化市| 新蔡县|