權(quán)限系統(tǒng)的設(shè)計

按照計劃本暑假進(jìn)行點名系統(tǒng)的大型更新乔妈,其一重頭戲就是強化權(quán)限體系辞嗡,加入角色的概念捆等。如何優(yōu)雅、高效地實現(xiàn)權(quán)限認(rèn)證成了一個棘手的問題续室。參考網(wǎng)上部分文章栋烤,初步計劃應(yīng)用下面的設(shè)計。在此整理記錄一下挺狰。

基本思路

“角色”是權(quán)限的最小單位明郭,所有用戶必須關(guān)聯(lián)角色,不允許直接賦予權(quán)限丰泊。一個用戶可以關(guān)聯(lián)多個角色薯定,其權(quán)限取并集。
每個角色可以包含各種權(quán)限瞳购。

用“位”表示權(quán)限

最簡單粗暴的權(quán)限記錄形式就是列表话侄,例如如下一個用于記錄權(quán)限的數(shù)據(jù)表:
[Table:permission]

Id UserName Permission
0 aaa LEAVE_BROWSE
1 aaa LEAVE_ADD
2 aaa LEAVE_DEL
3 bbb LEAVE_BROWSE

此種記錄方法雖簡單直觀,但冗余數(shù)據(jù)過多,每一次判斷權(quán)限都需要查詢一遍整個表年堆,性能差吞杭,尤其在用戶與權(quán)限種類較多的時候。
用“位”表示權(quán)限的理論基礎(chǔ)是超遞增序列:1,2,4,8,16……变丧,即:2^n(n>=0)芽狗。此數(shù)列有這樣一個特性:拼出的任意一個和數(shù)一定可以由這個序列中的一些數(shù)構(gòu)成,且構(gòu)成方法唯一痒蓬。例如:20=16+4且只有16和4可以拼出20.借助這個特性我們可以用來表示權(quán)限童擎。

首先建立權(quán)限內(nèi)容與編號的對應(yīng)關(guān)系(可寫為常量或xml或其他任意類型):

編號(為2^n) 說明
1 讀取請假列表
2 添加請假列表
4 刪除請假列表

假設(shè)用戶aaa同時具有讀取與添加請假列表的權(quán)限,只需要將他的權(quán)值設(shè)為1+2=3即可谊却。
如此一來柔昼,上述的權(quán)限表甚至可以刪掉,直接集成在用戶表里就夠了:
[Table:user]

UserName Permission ...OtherFields
aaa 7 ...
bbb 1 ...
…… …… ……

判斷權(quán)限

如果我們知道用戶aaa的權(quán)值為3炎辨,如何判斷他是否具有某一權(quán)限呢捕透?
很簡單,只需要進(jìn)行位與運算即可碴萧。若結(jié)果不為0則表示具有此權(quán)限乙嘀。

例如:
3D=011B;1D=001B破喻;2D=010B虎谢;4D=100B
011B & 010B = 010B ≠ 0,則具有添加權(quán)限曹质。
011B & 100B = 000B婴噩,則不具有刪除權(quán)限。

增加權(quán)限

那么如果在已有權(quán)限基礎(chǔ)上增加一個權(quán)限呢羽德?
只需進(jìn)行位或即可几莽。

例如:
011B | 100B = 111B = 7D
在讀取與添加的基礎(chǔ)上增加了刪除權(quán)限。
同時發(fā)現(xiàn)7=1+2+4宅静,與上述超遞增序列的定義是一致的

刪除權(quán)限

當(dāng)然章蚣,有時我們也需要剝奪某人的一些權(quán)限。
只要與上按位取反即可姨夹。

例如:
111B &~ 010B = 101B = 5D
此時剝奪了添加權(quán)限纤垂,只剩讀取、刪除權(quán)限了磷账。

范圍問題

不難看出峭沦,此處的權(quán)值是個整數(shù),一般情況下應(yīng)該會習(xí)慣性地用int存儲逃糟,這樣問題就來了熙侍,int一般情況下只能表示2^32,如果權(quán)限種類大于32該如何是好。

權(quán)限分組

未完待續(xù)蛉抓。庆尘。。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巷送,一起剝皮案震驚了整個濱河市驶忌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笑跛,老刑警劉巖付魔,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異飞蹂,居然都是意外死亡几苍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門陈哑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妻坝,“玉大人,你說我怎么就攤上這事惊窖」粝埽” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵界酒,是天一觀的道長圣拄。 經(jīng)常有香客問我,道長毁欣,這世上最難降的妖魔是什么庇谆? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮凭疮,結(jié)果婚禮上族铆,老公的妹妹穿的比我還像新娘。我一直安慰自己哭尝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布剖煌。 她就那樣靜靜地躺著材鹦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕姊。 梳的紋絲不亂的頭發(fā)上桶唐,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音茉兰,去河邊找鬼尤泽。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坯约。 我是一名探鬼主播熊咽,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闹丐!你這毒婦竟也來了横殴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤卿拴,失蹤者是張志新(化名)和其女友劉穎衫仑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堕花,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡文狱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缘挽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞄崇。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖到踏,靈堂內(nèi)的尸體忽然破棺而出杠袱,到底是詐尸還是另有隱情,我是刑警寧澤窝稿,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布楣富,位于F島的核電站,受9級特大地震影響伴榔,放射性物質(zhì)發(fā)生泄漏纹蝴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一踪少、第九天 我趴在偏房一處隱蔽的房頂上張望塘安。 院中可真熱鬧,春花似錦援奢、人聲如沸兼犯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽切黔。三九已至,卻和暖如春具篇,著一層夾襖步出監(jiān)牢的瞬間纬霞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工驱显, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诗芜,地道東北人瞳抓。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像伏恐,于是被迫代替她去往敵國和親孩哑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理脐湾,服務(wù)發(fā)現(xiàn)臭笆,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,913評論 6 13
  • 1秤掌、第八章 Samba服務(wù)器2愁铺、第八章 NFS服務(wù)器3、第十章 Linux下DNS服務(wù)器配站點闻鉴,域名解析概念命令:...
    哈熝少主閱讀 3,717評論 0 10
  • 一個故事就是一場輪回茵乱,堅強的女戰(zhàn)士愛麗絲兜兜轉(zhuǎn)轉(zhuǎn)又回到了噩夢初始的地方—浣熊市,她準(zhǔn)備火力全開孟岛,戰(zhàn)斗到死瓶竭。 T病毒...
    小腳冰涼a閱讀 1,118評論 0 1
  • 來源:網(wǎng)絡(luò) 1、什么是基金渠羞? 想先問你一下:你知道什么是炒股嗎斤贰? 如果知道的話就好說了,基金(股票型)就是我們把錢...
    孫華剛閱讀 767評論 0 0