基于角色的權(quán)限設(shè)計(jì)_第1頁
基于角色的權(quán)限設(shè)計(jì)_第2頁
基于角色的權(quán)限設(shè)計(jì)_第3頁
基于角色的權(quán)限設(shè)計(jì)_第4頁
基于角色的權(quán)限設(shè)計(jì)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于角色的權(quán)限設(shè)計(jì)(一) 在任何系統(tǒng)中,權(quán)限設(shè)計(jì)是最基礎(chǔ)的東西,本文給出一個(gè)基于角色的權(quán)限設(shè)計(jì)的循序漸進(jìn)的設(shè)計(jì)方案。 在權(quán)限系統(tǒng)中,功能(權(quán)限)是最小的單位,比如起草新聞、編輯新聞、審核新聞、刪除新聞等,而角色是一類功能的集合,比如新聞編輯這個(gè)角色,他可能有起草新聞、編輯新聞等功能集合,而責(zé)任編輯他可能就有更多的權(quán)限,比如除了新聞編輯的功能,還有審核新聞、刪除新聞等功能,給張三賦予新聞編輯的角色(其實(shí)我更愿意說把張三加入到新聞編輯這個(gè)角色中去),張三就可以起草新聞、編輯新聞了,給李四賦予責(zé)任編輯的角色,李四就可以起草新聞、編輯新聞、審核新聞、刪除新聞了。 我們來看看版本一的解決方案: 

2、0; 我們來模擬一下上面的數(shù)據(jù): 用戶信息表: UserID UserName U1 張三 U2 李四 角色表: RoleID RoleName R1 新聞編輯 R2 責(zé)任編輯 角色用戶表: RoleID UserID R1 U1 R2 U2 功能表: FunctionID FunctionName F1 起草新聞 F2 編輯新聞 F3 審核新聞 F4 刪除新聞 角色功能表: RoleID FunctionID R1 F1 R1 F2 R2 F1 R2 F2 R2 F3 R2 F4 我們來看看如何判斷一個(gè)用戶具有某個(gè)功能權(quán)限: 首先在用戶張三登錄的時(shí)候,獲取張三的全部功能列表: Select

3、FunctionID From 角色功能表 Where RoleID In (Select RoleID From 用戶角色表 Where UserID=U1 這樣就可以得到張三的全部功能列表Functions,在起草新聞的頁面我們就可以做如下判斷: Functions.Contain(F1;/當(dāng)然你可以把這個(gè)F1定義成一個(gè)常量:NewsFunction.Draft 如果為true就說明張三有起草新聞的權(quán)限。 當(dāng)然對于web應(yīng)用,您可以把Functions 用session保存起來,以避免每打開一個(gè)頁面都去數(shù)據(jù)庫中獲取。 似乎看起來是一個(gè)不錯(cuò)的解決方案。 還是新聞系統(tǒng),最初新聞系統(tǒng)沒有分類,但

4、是隨著新聞的增加,沒有分類的新聞看起來總是亂的,于是張三和李四給新聞添加了分類A、分類B,還是由張三負(fù)責(zé)起草,李四負(fù)責(zé)審核,以后又添加了更多的分類,并且也增加了人手,這個(gè)時(shí)候就有新的要求出來了:希望張三只負(fù)責(zé)分類A的起草,分類B的起草交給其他人做,李四呢也只負(fù)責(zé)分類A的審核(就相當(dāng)于是一個(gè)欄目的責(zé)任編輯)。 權(quán)限設(shè)計(jì)(二)   第一部分請參看: 針對這樣的需求,版本一就無能為力了(當(dāng)然你也可以增加幾個(gè)功能:比如分類A的新聞起草和分類B的新聞起草,再把這個(gè)功能添加到相應(yīng)的角色里面去,但是這個(gè)應(yīng)該不是我們要得解決方案吧,不過版本二也是基于這個(gè)思想來解決的)。 其實(shí)比新聞更好的例子是論壇板

5、塊的版主。 下面是版本二的解決方案: 在版本二的功能表中加入了一個(gè)ResourceType這個(gè)字段,這個(gè)字段用來表示對某個(gè)資源的分類(比如新聞),我們同樣來模擬一下(新聞分類A的ResourceType為:NTA,分類B為:NTB): 功能表: FunctionID ResourceType FunctionName F1 NTA 起草新聞:分類A F2 NTA 編輯新聞:分類A F3 NTA 審核新聞:分類A F4 NTA 刪除新聞:分類A F1 NTB 起草新聞:分類B F2 NTB 編輯新聞:分類B F3 NTB 審核新聞:分類B F4 NTB 刪除新聞:分類B 然后在角色表添加相應(yīng)的角

6、色,在角色功能表中添加對應(yīng)的功能。 獲取Functions的語句也相應(yīng)地做變化: Select FunctionID  + , + ResourceType From 角色功能表 Where RoleID In (Select RoleID From 用戶角色表 Where UserID=U1 權(quán)限的判斷也就變成: Functions.Contain(F1,NTA; 在新添加一個(gè)分類的時(shí)候,同時(shí)也在功能表中增加相應(yīng)的記錄(當(dāng)然不是在數(shù)據(jù)庫里面直接添加,由和功能相關(guān)的函數(shù)來添加)。 使用這種解決方案可以簡單地對有分類的應(yīng)用(比如論壇系統(tǒng))的每個(gè)分類實(shí)行不同的控制(比如VIP板塊,就只能

7、擁有VIP角色的用戶才能瀏覽、發(fā)表等,而其他板塊只要是注冊用戶就可以使用了)。 在實(shí)際應(yīng)用中FunctionID并不是隨便的一個(gè)字符串,而是進(jìn)行了編碼,其編碼中包含了模塊ID以及能夠體現(xiàn)出父子關(guān)系,舉個(gè)例子來說:對于論壇系統(tǒng),我們給它一個(gè)模塊ID為”30”,論壇的功能我們先分成2類,一類是管理類(比如刪除帖子),一類是使用類(比如發(fā)帖、回帖、瀏覽帖子等),給管理類一個(gè)編碼:01,使用類一個(gè)編碼:02,我們就對FunctionID進(jìn)行如下的編碼: 300101:刪除帖子 300201:發(fā)帖 300202:回帖 300203:瀏覽帖子 對于資源(比如某個(gè)板塊1,板塊的ID為:01),我們可以組合出如下的Functions(當(dāng)然這個(gè)組合你也可以不用逗號(hào)分隔,用其他的組合方式也可以,不過不要產(chǎn)生歧義): 300101,01:板塊1刪除帖子的功能 300201,01:板塊1發(fā)帖的功能   

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論