MIS系統(tǒng)權(quán)限控制的一個(gè)簡便方法
MIS系統(tǒng)權(quán)限控制的一個(gè)簡便方法收藏 新一篇: 創(chuàng)MIS系統(tǒng)的權(quán)限又多又復(fù)雜,很多人是在用戶數(shù)據(jù)表中設(shè)置多個(gè)字段,每個(gè)字段代表一個(gè)權(quán)限,或者設(shè)置一個(gè)字符串,不同的字符組合表示用戶的不同權(quán)限。簡單一點(diǎn)的,可以預(yù)先設(shè)置幾個(gè)角色,根據(jù)角色來行使預(yù)設(shè)權(quán)限,但又不夠靈活?,F(xiàn)介紹一個(gè)簡單靈活的權(quán)限分配控制的方法,并無高深見解,只是很多人忽略了它。如果您正在設(shè)計(jì)權(quán)限控制模式,不妨接著往下看。
此方法非常簡潔,擴(kuò)充性很好。
僅用一個(gè) integer 字段即可保存全部權(quán)限組合。
另外每個(gè)權(quán)限用一個(gè)整型表示
如:商品查看權(quán)限用 1 ;
商品更改權(quán)限用 2 ;
商品完全瀏覽權(quán)限用 4 ;
訂單查看權(quán)限用 8 ;
訂單更改權(quán)限用 16 ;更多權(quán)限…… 32,64,128 ……
給用戶分配權(quán)限時(shí),只需把用戶獲得的權(quán)限值累加就可以了。
應(yīng)用時(shí)使用“與”操作來識(shí)別哪個(gè)用戶是否擁有相應(yīng)的權(quán)限。
例子
if 用戶的權(quán)限總值 and 當(dāng)前操作所需的權(quán)限 = 當(dāng)前操作所需的權(quán)限 then
showmessage(‘有權(quán)限‘)
else
showmessage(‘無權(quán)限‘);
運(yùn)用此法,可簡單的設(shè)計(jì)出復(fù)雜的權(quán)限系統(tǒng)。
這篇文章實(shí)為一拋磚引玉之作,如您有更好的權(quán)限控制系統(tǒng)設(shè)計(jì)思路,歡迎來信討論: ufo2003@126.com
#aedvoan 發(fā)表于2005-11-13 15:24:00 IP: 220.191.126.*
能稍稍解釋下這是為什么嗎?
#小網(wǎng)蟲 發(fā)表于2005-11-18 18:13:00 IP: 218.72.153.*
道理很簡單啊,and 是以二進(jìn)制按位“與”操作的。其真值表是:
1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0
比如十進(jìn)位值 9的二進(jìn)制是:01001
8的二進(jìn)制是:01000
9 and 8的二進(jìn)制結(jié)果是 01000= 8
9 and 4的結(jié)果是 00000= 0
所以,就表示8包含在9的組合方式內(nèi)(8+1=9),而4不包含在內(nèi)。
#dbj 發(fā)表于2006-05-27 13:40:00 IP: 221.221.218.*
高明
#touchboy 發(fā)表于2006-11-07 12:25:00 IP: 124.29.31.*
我也是從速達(dá)那學(xué)到這一招,已經(jīng)在很多項(xiàng)目中運(yùn)用