http://blog.csdn.net/hwz119/article/details/3440763
2008
一、設(shè)計(jì)說(shuō)明
由于現(xiàn)在系統(tǒng)的設(shè)計(jì)具有很多不可知的因素,可能存在未來(lái)的擴(kuò)展,故此,在設(shè)計(jì)本權(quán)限架構(gòu)時(shí),盡可能的顧及到了未來(lái)的系統(tǒng)擴(kuò)充和可操作性、可維護(hù)性。把此權(quán)限架構(gòu)作為一個(gè)獨(dú)立的模塊進(jìn)行開發(fā),方便未來(lái)的其他系統(tǒng)應(yīng)用。
設(shè)計(jì)說(shuō)明:
本架構(gòu)采用樹型權(quán)限模型處理,所有節(jié)點(diǎn),都可以作為權(quán)限的實(shí)體存在。
如:
|--權(quán)限A
|--------插入記錄。
|--------修改記錄。
|--------刪除記錄。
|--------查詢權(quán)限。
|--權(quán)限B
|--------打印權(quán)限。
|--------瀏覽權(quán)限。
|--------管理權(quán)限。
|--------查詢權(quán)限。
如上所示,在[權(quán)限A]這個(gè)模塊下,存在了插入、修改、刪除、查詢四個(gè)權(quán)限(也可能是存在多個(gè)),那么我們?yōu)榱藬U(kuò)展的方便,將所有的權(quán)限,都以此樹的形式進(jìn)行處理,針對(duì)某一個(gè)權(quán)限節(jié)點(diǎn),進(jìn)行判斷,控制。當(dāng)我們要控制某一個(gè)模塊的權(quán)限時(shí),我們可以針對(duì)其父節(jié)點(diǎn)進(jìn)行控制,當(dāng)我們需要控制到某一個(gè)末端的權(quán)限時(shí),我們可以針對(duì)末端子節(jié)點(diǎn)進(jìn)行控制。
每一個(gè)用戶,都可以擁有多種角色,這樣,我們可以方便處理交叉權(quán)限。
二、庫(kù)表結(jié)構(gòu)
見附件:PurviewTable.Sql
注:為方便移植,在程序編寫過(guò)程中,應(yīng)盡量避免使用存儲(chǔ)過(guò)程,盡量使用標(biāo)準(zhǔn)SQL和數(shù)據(jù)集進(jìn)行操作,數(shù)據(jù)集的使用,盡量使用非強(qiáng)命名的數(shù)據(jù)集,數(shù)據(jù)查詢時(shí),避免標(biāo)明字段的查詢,條件允許的情況下,盡量使用*號(hào),方便擴(kuò)展。
為了程序編寫的方便,所有表,都沒(méi)有使用關(guān)系,所以,在表的添加刪除操作時(shí),一定要到位,特別時(shí)刪除時(shí),關(guān)系子表的數(shù)據(jù)一定要同步刪除。
三、程序設(shè)計(jì)
1、 權(quán)限維護(hù)模塊。
本模塊主要實(shí)現(xiàn)針對(duì)權(quán)限樹(表Tab_Purview)的維護(hù),實(shí)現(xiàn)以樹的形式的維護(hù)管理。
實(shí)現(xiàn)要點(diǎn):
A、 實(shí)現(xiàn)權(quán)限表以樹形式的顯示。
B、 實(shí)現(xiàn)權(quán)限表的不同節(jié)點(diǎn)的插入、修改、刪除。
2、 用戶維護(hù)模塊。
本模塊主要實(shí)現(xiàn)對(duì)用戶的管理,針對(duì)用戶表(Tab_UserTable)的操作。實(shí)現(xiàn)其添加、刪除、修改等功能。用戶密碼字段(UserPass)應(yīng)保存加密后的密碼。
3、 角色維護(hù)模塊
本模塊主要實(shí)現(xiàn)針對(duì)角色的維護(hù),其實(shí)就是表Tab_Role的插入修改刪除。
A、 針對(duì)角色表Tab_Role的插入刪除,對(duì)應(yīng)的角色權(quán)限表Tab_RolePurview也要進(jìn)行操作。
B、 每建立一個(gè)角色,將權(quán)限表Purview中的權(quán)限架構(gòu)信息COPY一份到Tab_RolePurview表,并賦于其相應(yīng)的權(quán)限。
C、 該角色所包含的用戶的管理,針對(duì)該角色,添加、刪除包含的用戶。當(dāng)添加一個(gè)用戶時(shí),就要向角色用戶權(quán)限表Tab_RoleUserPurview插入數(shù)據(jù),Copy角色用戶表中Tab_RolePurview的數(shù)據(jù)到Tab_RoleUserPurview表。
D、 當(dāng)刪除一個(gè)用戶時(shí),應(yīng)當(dāng)連同Tab_RoleUserPurview中該用戶的權(quán)限一同刪除。
E、 當(dāng)刪除一個(gè)角色時(shí),應(yīng)當(dāng)連同Tab_RoleUserPurview中該角色的權(quán)限一同刪除。
4、 權(quán)限校驗(yàn)?zāi)K。
權(quán)限的校驗(yàn)可以直接根據(jù)模塊ID(Tab_Purview中的ID)檢索Tab_RoleUserPurview表,檢索Purview為[有]的數(shù)據(jù),如果存在行,說(shuō)明該用戶存在此模塊的操作權(quán)限,否則說(shuō)明該用戶沒(méi)有此模塊的權(quán)限。
5、 擴(kuò)展辦法。
A、 用戶登陸。
用戶登陸時(shí),直接讀Tab_UserTable的數(shù)據(jù),傳入用戶ID和加密后的密碼進(jìn)行比對(duì)檢索。
B、 其他
6、 其他
四、界面設(shè)計(jì)
1、 權(quán)限維護(hù)。
見控件:UC_PurviewManager,UC_PurviewAdd,新增和修改可以使用同一界面。
2、 用戶管理。
見控件:UC_UserManager,UC_UserAdd,新增和修改可以使用同一界面。
3、 角色管理。
見控件:UC_RoleManager
4、 系統(tǒng)登陸。
見控件:UC_Login
五、其他
A、 字典管理
字典的管理其實(shí)就是一個(gè)表(Tab_Dictionary)的讀寫操作。
界面見UC_DicManager。
左邊為字典樹,里面根據(jù)Tab_Dictionary中的唯一字典名列出,選擇左邊字典名時(shí),右邊GRID中列出該字典下的所有字段變量,選擇一個(gè)字段變量,將字段變量的信息讀入上面編輯框中,點(diǎn)保存保存到庫(kù)。如果是新的字典,則直接插入到表,然后刷新左側(cè)樹信息。點(diǎn)刪除時(shí),刪除GRID選擇的數(shù)據(jù)。如果只有一條,提示不能刪除。字典最少要保留一條數(shù)據(jù)。
六、時(shí)間要求:
SQL腳本
--權(quán)限樹表,主要是保存一個(gè)權(quán)限架構(gòu)的模型。
Create Table Tab_Purview
(
PurviewID Int Identity (1, 1) Not Null, --自增ID
ParentID Int Null, --父節(jié)點(diǎn)ID
OrderIndex Int Null, --排序ID,主要是方便以后的權(quán)限編輯
NodeName Varchar(50), --權(quán)限節(jié)點(diǎn)名稱
Describes Varchar(200) --權(quán)限節(jié)點(diǎn)描述
);
--角色表,保存角色和角色的描述信息。
Create Table Tab_Role
(
RoleID Int Identity (1, 1) Not Null, --自增ID
RoleName Varchar(50) Not Null, --角色名稱
Describes Varchar(200) --角色描述
);
--角色權(quán)限表,保存某一個(gè)角色的權(quán)限信息。
Create Table Tab_RolePurview
(
RoleID Int Not Null, --角色I(xiàn)D
PurviewID Int Not Null, --權(quán)限ID
PurviewName Varchar(50) Not Null,--權(quán)限名稱,這里的權(quán)限名稱其實(shí)是一個(gè)冗余字段,主要是方便顯示,顯示時(shí)不用再使用聯(lián)合查詢。
Describes Varchar(200), --權(quán)限節(jié)點(diǎn)描述
Purview Varchar(2) Not Null --權(quán)限,這里記錄一個(gè)文本類型(有、無(wú))
);
--用戶表,保存用戶信息。
Create Table Tab_UserTable
(
UserID Int Identity (1, 1) Not Null,--用戶ID
UserName Varchar(50), --用戶名稱,這里的用戶名稱其實(shí)是一個(gè)冗余字段,主要是方便顯示,顯示時(shí)不用再使用聯(lián)合查詢。
UserPass Varchar(2000), --用戶密碼,保留2000的長(zhǎng)度主要是針對(duì)密碼的加密處理。
Describes Varchar(200) --用戶描述
);
--角色用戶表,保存某一個(gè)角色下的用戶信息。
Create Table Tab_RoleUser
(
RoleID Int Not Null, --角色I(xiàn)D
UserID Int Not Null, --用戶ID
UserName Varchar(50) --用戶名稱。
);
--角色用戶權(quán)限表,保存某一個(gè)角色下的用戶權(quán)限信息。
Create Table Tab_RoleUserPurview
(
RoleID Int Not Null, --角色I(xiàn)D
UserID Int Not Null, --用戶ID
PurviewID Int Not Null, --權(quán)限ID
PurviewName Varchar(50), --權(quán)限名稱,這里的權(quán)限名稱其實(shí)是一個(gè)冗余字段,主要是方便顯示,顯示時(shí)不用再使用聯(lián)合查詢。
Purview Varchar(2) Not Null --權(quán)限,這里記錄一個(gè)文本類型(有、無(wú))
);
聯(lián)系客服