基于web信息管理系統(tǒng)的權(quán)限設(shè)計(jì)分析和總結(jié)_第1頁
基于web信息管理系統(tǒng)的權(quán)限設(shè)計(jì)分析和總結(jié)_第2頁
基于web信息管理系統(tǒng)的權(quán)限設(shè)計(jì)分析和總結(jié)_第3頁
基于web信息管理系統(tǒng)的權(quán)限設(shè)計(jì)分析和總結(jié)_第4頁
基于web信息管理系統(tǒng)的權(quán)限設(shè)計(jì)分析和總結(jié)_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于web信息管理系統(tǒng)的權(quán)限設(shè)計(jì)分析和總結(jié)在blog中看到有人寫到web權(quán)限管理的一些文章,這里把我曾經(jīng)做過的一些權(quán)限管理作一下總結(jié),歡迎拍磚。 這里討論的權(quán)限只涉及到信息管理系統(tǒng)里面的權(quán)限管理,超出此范圍的權(quán)限管理暫不涉及。1、權(quán)限的應(yīng)用對象上面我們已經(jīng)定義了權(quán)限的范圍,就是信息系統(tǒng)管理里面的表單操作,那么權(quán)限的應(yīng)用對象就是表單,更進(jìn)一步說,就是表達(dá)表單內(nèi)容的web管理頁面。2、權(quán)限的分類一個(gè)頁面的權(quán)限范圍分為以下幾種,也可以叫做基本權(quán)限單位。l         操作權(quán)限:操作權(quán)限是一種頁面級(jí)別的權(quán)限,

2、也可以叫做頁面權(quán)限。包括以下幾種n         新增n         修改n         刪除n         查詢 在此基礎(chǔ)上還可以進(jìn)行更加詳細(xì)的一些分類,比如查看他人記錄的權(quán)限,修改他人記錄的權(quán)限等。這部分也可以使用下面的記錄權(quán)限來實(shí)現(xiàn)。l &

3、#160;       按鈕權(quán)限:針對頁面上按鈕的權(quán)限管理,包括n         是否可見n         是否可用 有時(shí)候,我們可以把按鈕權(quán)限看作為字段權(quán)限。l         字段權(quán)限:字段在頁面的不同狀態(tài)(新增,修改,查詢)下面的各種狀態(tài)管理。包括n  

4、60;      是否可見n         是否可修改l         記錄權(quán)限:記錄權(quán)限是指用戶對某些記錄的查看和修改權(quán)限。比如客戶關(guān)系管理系統(tǒng)中,不同界別的系統(tǒng)用戶可以看到不同的記錄,例如上司可以看他所有下級(jí)員工的客戶列表等。3、權(quán)限的實(shí)現(xiàn)模型上面的權(quán)限分類大概對涉及到頁面元素的權(quán)限進(jìn)行了一個(gè)比較全面的概括。另外一個(gè)問題就是權(quán)限管理的實(shí)現(xiàn)模型。在大部分的系統(tǒng)中都是用的基于角色控制

5、模型的權(quán)限管理。在這樣的系統(tǒng)中,創(chuàng)建一系列的角色,然后把基本權(quán)限單位分配給這些角色,再把角色分配給用戶,這樣用戶登錄系統(tǒng)后,就根據(jù)當(dāng)前用戶所擁有的角色可以定位出權(quán)限。 在針對信息管理系統(tǒng)中,權(quán)限模型有自己的特色,除了角色的概念以外,還有表單權(quán)限的概面。第一節(jié)里面所討論的各種權(quán)限基本單位不但可以應(yīng)用到角色上,也可以應(yīng)用到表單上。對于應(yīng)用到表單上的基本權(quán)限單位,我們叫做表單的固有權(quán)限屬性(靜態(tài)權(quán)限)。對于應(yīng)用到角色上的基本權(quán)限單位,我們叫做角色權(quán)限屬性(動(dòng)態(tài)權(quán)限)。用下圖來表示:  根據(jù)上面的模型,一個(gè)用戶登錄到系統(tǒng)中后,得到某一個(gè)表單的權(quán)限就和這個(gè)表單的固有權(quán)限屬性

6、和這樣用戶所擁有的角色有關(guān)。4、權(quán)限的計(jì)算方式用戶登錄后對一個(gè)表單進(jìn)行操作,靜態(tài)權(quán)限只有一個(gè),即表單本身的權(quán)限屬性,動(dòng)態(tài)權(quán)限可以有多個(gè),即用戶可以同時(shí)屬于多個(gè)角色,這些角色在這個(gè)表單上都有不同的動(dòng)態(tài)權(quán)限。用戶對這個(gè)表單所能進(jìn)行的操作是由這個(gè)動(dòng)態(tài)權(quán)限和靜態(tài)權(quán)限的綜合作用決定的。進(jìn)行權(quán)限判斷分為兩個(gè)步驟:1、 動(dòng)態(tài)權(quán)限組合:根據(jù)用戶所屬的角色的權(quán)限分析得到最終的動(dòng)態(tài)權(quán)限集合。2、 動(dòng)態(tài)權(quán)限和靜態(tài)權(quán)限的組合:利用得到的動(dòng)態(tài)權(quán)限集合再和靜態(tài)權(quán)限進(jìn)行綜合分析得到用戶的最終權(quán)限。 在動(dòng)態(tài)權(quán)限和動(dòng)態(tài)權(quán)限進(jìn)行組合判斷,以及動(dòng)態(tài)權(quán)限和靜態(tài)權(quán)限進(jìn)行組合判斷的時(shí)候,根據(jù)權(quán)限類型的不同,

7、使用不同的組合判斷方法對于 操作權(quán)限,分為兩種組合方法:l         或操作:或操作認(rèn)為,兩個(gè)層次的權(quán)限單位進(jìn)行比較,只要其中一個(gè)權(quán)限單位認(rèn)為“可以做”,那么組合權(quán)限結(jié)果就是“可以做”。例如對于“增加”這個(gè)操作權(quán)限,如果角色A設(shè)置為可以增加,角色B設(shè)置為不可以增加,那么綜合的結(jié)果就是 可以進(jìn)行 “增加”l         與操作:與操作認(rèn)為,兩個(gè)層次的權(quán)限單位進(jìn)行比較,只要其中一個(gè)權(quán)限單位認(rèn)為“不可以做”,那么組合權(quán)限結(jié)果就是“不

8、可以做”。例如: 對于“增加”這個(gè)操作權(quán)限,如果角色A設(shè)置為可以增加,角色B設(shè)置為不可以增加,那么綜合的結(jié)果就是 不可以進(jìn)行 “增加” 對于字段權(quán)限 和 記錄權(quán)限 只有一種組合方法:l         權(quán)限并集:也就是說組合的結(jié)果是這兩種層級(jí)的權(quán)限單位控制范圍的一個(gè)相交的結(jié)果。例如:對于角色A,他在表單F上的的只讀字段為(a,b,c,d),角色B在表單F上的只讀字段為(c,d,e,f),那么角色A和角色表的相交結(jié)果就是只讀字段集合(a,b,c,d,e,f)。 下面兩張表顯示了不同的權(quán)限層次,不同

9、的權(quán)限類型在進(jìn)行權(quán)限比較時(shí)選擇不同的比較方法:不同的角色之間進(jìn)行權(quán)限比較: 角色B-操作權(quán)限角色B-字段權(quán)限角色B-記錄權(quán)限角色A-操作權(quán)限或操作  角色A-字段權(quán)限 并集 角色A-記錄權(quán)限  并集 當(dāng)有多個(gè)角色權(quán)限是,列入有角色A,B,C,D,先對A,B做計(jì)算,然后把計(jì)算結(jié)果和C進(jìn)行計(jì)算,依次類推。 動(dòng)態(tài)權(quán)限和靜態(tài)權(quán)限進(jìn)行權(quán)限比較: 動(dòng)態(tài)權(quán)限-操作權(quán)限動(dòng)態(tài)權(quán)限-字段權(quán)限動(dòng)態(tài)權(quán)限-記錄權(quán)限靜態(tài)權(quán)限-操作權(quán)限與操作  靜態(tài)權(quán)限-字段權(quán)限 并集 靜態(tài)權(quán)限-記錄

10、權(quán)限  交集看過基于web信息管理系統(tǒng)的權(quán)限設(shè)計(jì)分析和總結(jié)(理論)的一些網(wǎng)友問道,能不能給出這個(gè)權(quán)限模型的實(shí)現(xiàn),其實(shí)模型是一個(gè)解決給定問題的理論指導(dǎo),具體的實(shí)現(xiàn)可以有多種方式,可能根據(jù)您的項(xiàng)目的實(shí)際情況有所不同,這里給出一個(gè)是基于sql server數(shù)據(jù)庫的實(shí)現(xiàn)。這里提到的只是一些基本的權(quán)限信息,您當(dāng)然可以擴(kuò)展更多的權(quán)限信息。 首先需要定義的是基本權(quán)限單位的數(shù)據(jù)庫模型,用下表來表示:(這個(gè)表不是獨(dú)立存在的,而是合并到表單信息表 和 角色權(quán)限表中)權(quán)限類型字段名稱類型意義操作權(quán)限AddActionbit新增ModifyActionbit修改DeleteActionb

11、it刪除SearchActionbit查詢字段權(quán)限(字段之間以逗號(hào) , 分割)ReadOnlyColumnsOnAddNvarchar(1000)只讀字段(新增)HiddenColumnsOnAddNvarchar(1000)隱藏字段(新增)ReadOnlyColumnsOnModifyNvarchar(1000)只讀字段(修改)HiddenColumnsOnModifyNvarchar(1000)隱藏字段(修改)HiddenColumnsOnSearchNvarchar(1000)隱藏字段(查詢)紀(jì)錄權(quán)限(一段表示權(quán)限范圍的語句,在本實(shí)現(xiàn)中,就是一個(gè)sql語句的片斷) ReadOn

12、lyRecordsNvarchar(1000)只讀紀(jì)錄HiddenRecordsNvarchar(1000)隱藏紀(jì)錄 接下來是表單信息表,表單信息表有一些基本的表單信息,例如表單名稱等,同時(shí)表單信息表也擁有以上的基本權(quán)限數(shù)據(jù),這些權(quán)限信息構(gòu)成了表單的固有權(quán)限屬性(靜態(tài)權(quán)限),一個(gè)簡單的表單信息表如下所示:表單信息表:Forms 字段名稱類型意義  FormIDNvarchar(100)表單IDFormNameNvarchar(100)表單名稱AddActionbit新增表單的固有權(quán)限屬性(靜態(tài)權(quán)限)ModifyActionbit修改DeleteActio

13、nbit刪除SearchActionbit查詢ReadOnlyColumnsOnAddNvarchar(1000)只讀字段(新增)HiddenColumnsOnAddNvarchar(1000)隱藏字段(新增)ReadOnlyColumnsOnModifyNvarchar(1000)只讀字段(修改)HiddenColumnsOnModifyNvarchar(1000)隱藏字段(修改)HiddenColumnsOnSearchNvarchar(1000)隱藏字段(查詢)ReadOnlyRecordsNvarchar(1000)只讀紀(jì)錄HiddenRecordsNvarchar(1000)隱藏紀(jì)錄

14、 下面就是角色表了,角色表相當(dāng)簡單,只包含一個(gè)角色名稱就可以了:角色表:Roles字段名稱類型意義RoleIDNvarchar(100)角色I(xiàn)DRoleNameNvarchar(100)角色名稱 定義好了角色表,接下來就是角色權(quán)限了,就是角色在每個(gè)表單上的權(quán)限表現(xiàn)形式,當(dāng)前這個(gè)表就需要跟角色以及表單有關(guān)了,具體的結(jié)果如下:角色權(quán)限表: RolePurview字段名稱類型意義   RolePurviewIDNvarchar(100)主鍵FormIDNvarchar(100)表單ID外鍵,關(guān)聯(lián)到表單信息表的FormIDRoleIDNvarchar(

15、100)角色I(xiàn)D外鍵,關(guān)聯(lián)到角色表的RoleIDAddActionbit新增表單的角色權(quán)限屬性(動(dòng)態(tài)權(quán)限)ModifyActionbit修改DeleteActionbit刪除SearchActionbit查詢ReadOnlyColumnsOnAddNvarchar(1000)只讀字段(新增)HiddenColumnsOnAddNvarchar(1000)隱藏字段(新增)ReadOnlyColumnsOnModifyNvarchar(1000)只讀字段(修改)HiddenColumnsOnModifyNvarchar(1000)隱藏字段(修改)HiddenColumnsOnSearchNvarc

16、har(1000)隱藏字段(查詢)ReadOnlyRecordsNvarchar(1000)只讀紀(jì)錄HiddenRecordsNvarchar(1000)隱藏紀(jì)錄 當(dāng)然要完成整個(gè)模型,還需要用戶信息表以及用戶角色表用戶信息表:Users字段名稱類型意義UserIDNvarchar(100)用戶IDUserNameNvarchar(100)用戶名稱 用戶角色表:UserInRoles字段名稱類型意義UserInRoleIDNvarchar(100)主鍵UserIDNvarchar(100)用戶ID外鍵,關(guān)聯(lián)到用戶表的UserIDRoleIDNvarchar(100)角色I(xiàn)D外

17、鍵,關(guān)聯(lián)到角色表的RoleID 到目前為止,我們完成這個(gè)模型所需要的表都出場了,下面的圖表示了他們之間的關(guān)系:  在下節(jié)中將實(shí)現(xiàn)具體的權(quán)限的計(jì)算公式。首先需要一個(gè)存儲(chǔ)過程來實(shí)現(xiàn)計(jì)算用戶在表單上的權(quán)限,這個(gè)存儲(chǔ)過程接受兩個(gè)參數(shù),用戶ID和表單ID,在這個(gè)存儲(chǔ)過程里面使用一條sql語句來計(jì)算用戶在表單上的權(quán)限,如下所示: Code- =-計(jì)算用戶對表單的權(quán)限- =create PROCEDURE dbo.sp_GetUserPurveiewOnMenu userID nvarchar(100) ,-用戶ID formID nvarchar(100) -表單IDASBE

18、GIN SELECT rp.formID, u.userID, -計(jì)算記錄權(quán)限:只讀記錄 dbo.fun_Purview_GetRecordPurview(u.userID,rp.formID,'ReadOnlyRecords') as ReadOnlyRecords, -計(jì)算記錄權(quán)限:隱藏記錄記錄 dbo.fun_Purview_GetRecordPurview(u.userID,rp.formID,'HiddenRecord') as HiddenRecord, -計(jì)算字段權(quán)限:只讀記錄(新增) dbo.fun_Purview_GetColumns(u.us

19、erID,rp.formID,'ReadOnlyColumnsOnAdd') as ReadOnlyColumnsOnAdd, -計(jì)算字段權(quán)限:隱藏記錄(新增) dbo.fun_Purview_GetColumns(u.userID,rp.formID,'HiddenColumnsOnAdd') as HiddenColumnsOnAdd, -計(jì)算字段權(quán)限:只讀記錄(修改) dbo.fun_Purview_GetColumns(u.userID,rp.formID,'ReadOnlyColumnsOnModify') as ReadOnlyCol

20、umnsOnModify, -計(jì)算字段權(quán)限:隱藏記錄(修改) dbo.fun_Purview_GetColumns(u.userID,rp.formID,'HiddenColumnsOnModify') as HiddenColumnsOnModify, -計(jì)算字段權(quán)限:隱藏記錄(查詢) dbo.fun_Purview_GetColumns(u.userID,rp.formID,'HiddenColumnsOnSearch') as HiddenColumnsOnSearch, -計(jì)算操作權(quán)限:新增 (CASE WHEN (SUM(CAST(CASE f.Add

21、Action WHEN 0 THEN 0 ELSE rp.AddAction END) AS int) > 0 THEN cast(1 as bit) ELSE cast(0 as bit) END) as AddAction, -計(jì)算操作權(quán)限:修改 (CASE WHEN ( SUM(CAST(CASE f.ModifyAction WHEN 0 THEN 0 ELSE rp.ModifyAction END) AS int) ) > 0 THEN cast(1 as bit) ELSE cast(0 as bit) END) as ModifyAction, -計(jì)算操作權(quán)限:刪除

22、 (CASE WHEN ( SUM(CAST(CASE f.DeleteAction WHEN 0 THEN 0 ELSE rp.DeleteAction END) AS int) > 0 THEN cast(1 as bit) ELSE cast(0 as bit) END) as DeleteAction, -計(jì)算操作權(quán)限:查詢 (CASE WHEN ( SUM(CAST(CASE f.SearchAction WHEN 0 THEN 0 ELSE rp.SearchAction END) AS int) > 0 THEN cast(1 as bit) ELSE cast(0

23、as bit) END) as SearchAction FROM users u, userinroles ur, RolePurview rp, forms f WHERE u.userID = ur.userID AND ur.roleID = rp.roleID AND rp.formID = f.formID AND u.userID = userid AND f.formID = formID GROUP BY rp.formID,u.userIDEND 在這個(gè)存儲(chǔ)過程里面,有兩個(gè)用戶函數(shù),分別用于計(jì)算字段權(quán)限和記錄權(quán)限。用于計(jì)算字段權(quán)限的函數(shù)是fun_Purview_GetCol

24、umns,這個(gè)函數(shù)接受三個(gè)參數(shù),分別是用戶ID、表單ID和字段權(quán)限類型,具體如下所示: Code- =- 計(jì)算字段權(quán)限- =create FUNCTION dbo.fun_Purview_GetColumns( userID nvarchar(100),-用戶ID formID nvarchar(100),-表單ID columnType varchar(50)-字段權(quán)限類型)RETURNS nvarchar(2000)ASBEGIN declare columsID nvarchar(4000),tem nvarchar(1000),c cursor set columsID='&#

25、39; set tem = '' if columnType = 'ReadOnlyColumnsOnAdd' - 計(jì)算只讀字段集合(新增)。對于其他字段集合類似 begin set c = cursor for select ReadOnlyColumnsOnAdd from forms where formID=formID union select ReadOnlyColumnsOnAdd from RolePurview where roleID in( select roleID from UserInRoles where userID=userid

26、 ) open c fetch next from c into tem while fetch_status =0 begin if tem is not null begin set columsID = columsID +','+ tem end fetch next from c into tem end close c deallocate c end return columsIDEND 用于計(jì)算記錄權(quán)限的函數(shù)是fun_Purview_GetRecordPurview,這個(gè)函數(shù)接受三個(gè)參數(shù),分別是用戶ID、表單ID和記錄權(quán)限類型,具體如下所示: Code- =-計(jì)

27、算記錄權(quán)限- =alter FUNCTION dbo.fun_Purview_GetRecordPurview( userid int,-用戶ID formID int ,-表單ID recordPurviewType varchar(100)-記錄權(quán)限類型)RETURNS nvarchar(4000)ASBEGIN declare recordPurviewSql nvarchar(4000),c2 cursor,sql nvarchar(4000), formRecordPurviewExpression nvarchar(4000) set recordPurviewSql = '

28、;' set sql = '' if recordPurviewType ='ReadOnlyRecords'-計(jì)算只讀記錄,對于隱藏記錄類似 begin set c2 = cursor for select ReadOnlyRecords from RolePurivew where roleID in( select roleID from UserInRoles where userID=userid ) and formID=formID open c2 fetch next from c2 into sql while fetch_status

29、 =0 begin if sql is not null and sql<> '' begin -對于角色之間的記錄權(quán)限,使用并集 set recordPurviewSql = recordPurviewSql +'('+sql+')' + ' or ' end fetch next from c2 into sql end close c2 deallocate c2 if len(recordPurviewSql) > 3 begin set recordPurviewSql = substring(recordPurviewSql,1,len(recordPurviewSql)-3) end select formRecordPurviewExpression

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論