先介紹數(shù)據(jù)模型和應(yīng)用界面,后繼對實現(xiàn)細節(jié)做選擇性闡述。
數(shù)據(jù)表關(guān)系如下:
該圖標明了登陸用戶、角色、部門(機構(gòu))、用戶組、角色和模塊功能之間的關(guān)系。為方便起見,所有表都只保留必要字段。
在本系統(tǒng)設(shè)計中,如下概念有著相對特殊的含義。
一、用戶(user): 系統(tǒng)的使用者。
二、部門(org):體現(xiàn)了用戶的行政關(guān)系,
三、組(group) :是某相同職能的用戶的集合,可以和用戶一樣與角色產(chǎn)生關(guān)聯(lián)。設(shè)置組的目的是為了方便用戶的角色分配,減少用戶與角色的直接對應(yīng)關(guān)系。用戶的角色可以是其組角色和其直接分配的角色之合集。限于作者的時間和精力,組功能在該系統(tǒng)中沒有具體的實現(xiàn)。
四、角色(role):角色對應(yīng)著某些功能(function)的集合,被分配一個角色意味著有權(quán)執(zhí)行這些功能。角色表中的字段"functions"記錄相關(guān)的功能id,id之間用逗號隔開。
五、功能(function):系統(tǒng)的一個或者多個執(zhí)行準入。
那么如何表現(xiàn)“功能”以最終實現(xiàn)控制用戶的每一個細微動作呢?假如不特定于某種架構(gòu),可以這么設(shè)計該表字段:
CREATE TABLE `m2_function` ( `FUNCTION_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `NAME` varchar(50) NOT NULL, `FUNC_TREE_ID` int(10) unsigned NOT NULL, `RESOURCE` varchar(100) NOT NULL, `SUFFIX` varchar(50) NOT NULL, `DESCRIPTION` varchar(100) NOT NULL, `PARAMS` varchar(45) NOT NULL, PRIMARY KEY (`FUNCTION_ID`) ) DEFAULT CHARSET=utf8;
假定有三個web訪問路徑
http://127.0.0.1:8080/app/sys/user.jsp?action=index&userid=1203
http://127.0.0.1:8080/app/sys/user.yuetong?action=add
http://127.0.0.1:8080/app/sys/user.yuetong?action=update&userid=1203
這三個訪問點被人為的劃分為兩個功能準入(當(dāng)然亦可以是一個或者三個),見下圖
由此可知,“功能”是衡量用戶準入的最小刻度。在用戶訪問某個地址的時候,我們可以通過解析URL對比他擁有的“功能”權(quán)限來實現(xiàn)權(quán)限管理。
借助于某些架構(gòu)或者設(shè)計思路,可以避免用戶直接訪問JSP頁面,甚至全系統(tǒng)的訪問地址都使用同一后綴,這種情況下可以省去SUFFIX字段。 本系統(tǒng)就是這種情況(JSP頁面置于WEB-INF下,采用struts2架構(gòu))。
六、功能模塊樹(function tree):功能的目錄組織,起分類的作用。在為角色設(shè)定功能的時候,用戶界面可以利用帶選擇框的js樹。而這顆js樹是后臺的功能樹表以及功能表的聯(lián)合表現(xiàn)形式。功能模塊樹可以方便的與菜單樹建立映射關(guān)系,限于作者的時間和精力,該系統(tǒng)并未實現(xiàn)菜單樹。
下面從實際應(yīng)用入手做直觀的介紹:
用超級管理員賬號YT000登陸(該賬號擁有全部的權(quán)限,賬號信息應(yīng)該預(yù)先寫入數(shù)據(jù)庫或者以配置文件方式放到類路徑下):
首先是機構(gòu)管理部分,這里可以編輯某個公司或者單位的組織結(jié)構(gòu):
然后進入用戶管理部分,會有一個用戶列表:
可以編輯用戶的屬性,設(shè)置其所屬機構(gòu):
還可以為用戶設(shè)定多個角色:
接著,再看看角色的列表:
最后,在系統(tǒng)資源部分,可以進行功能模塊樹的編輯(和機構(gòu)樹的編輯一樣)
點擊編輯詳細功能,可以為選中的結(jié)點設(shè)置具體功能:
配置妥當(dāng)以后,當(dāng)我們以一個普通用戶登錄,執(zhí)行某個操作的時候,如果沒有權(quán)限,系統(tǒng)會做出提示。關(guān)于用戶的權(quán)限驗證,后繼會有介紹。
相關(guān)闡述請關(guān)注后繼文章。