熊海東,徐 德,潘 剛,彭智勇(.四川幼兒師范高等??茖W(xué)校教務(wù)處,四川綿陽6700;.中國人民銀行烏魯木齊中心支行,新疆烏魯木齊8000;.四川文理學(xué)院計(jì)算機(jī)學(xué)院,四川達(dá)州65000;.凱里學(xué)院組織部,貴州凱里5560)
一種瀏覽器端RBAC模型
熊海東1,徐德2,潘剛3,彭智勇4
(1.四川幼兒師范高等??茖W(xué)校教務(wù)處,四川綿陽621700;2.中國人民銀行烏魯木齊中心支行,新疆烏魯木齊832000;3.四川文理學(xué)院計(jì)算機(jī)學(xué)院,四川達(dá)州635000;4.凱里學(xué)院組織部,貴州凱里556011)
實(shí)現(xiàn)基于角色訪問控制(RBAC)是B/S或C/S系統(tǒng)安全的必要條件,在服務(wù)端實(shí)現(xiàn)RBAC有成熟的方案,而瀏覽器端尚沒有標(biāo)準(zhǔn)方案.為實(shí)現(xiàn)瀏覽器端的RBAC,在常用JavaScript框架ExtJS基礎(chǔ)上,提出模塊和操作欄的概念,設(shè)計(jì)了瀏覽器端的RBAC模型,使用服務(wù)器端的RBAC數(shù)據(jù)實(shí)現(xiàn)了瀏覽器端的RBAC.在實(shí)際項(xiàng)目開發(fā)中使用該模型,不僅使系統(tǒng)瀏覽器端實(shí)現(xiàn)了RBAC,而且為瀏覽器端開發(fā)提供了一個(gè)開發(fā)標(biāo)準(zhǔn)和規(guī)范,更有助于提高開發(fā)效率及系統(tǒng)源代碼的規(guī)范.
RBAC模型;瀏覽器端;ExtJS;Spring Security;題庫
Xiong HD,Xu D,Pan G,etal.Role-Based Access Control(RBAC)Modelon the Browser Side[J].Journal of Yibin Uni?versity,2015,15(6):66-69.
隨著計(jì)算機(jī)B/S系統(tǒng)的廣泛應(yīng)用,客戶對(duì)系統(tǒng)安全性和用戶體驗(yàn)提出了更高的要求,系統(tǒng)安全的一個(gè)必要條件就是實(shí)現(xiàn)基于角色訪問控制(Role-Based Access Control,RBAC).在服務(wù)器端,實(shí)現(xiàn)RBAC比較容易,模型方面有RBAC96模型、AR?BAC97模型、DRABC模型等,在這些模型的基礎(chǔ)上出現(xiàn)了許多非常優(yōu)秀的開源框架,像Spring Security Framework、Shiro等.但在瀏覽器端缺乏標(biāo)準(zhǔn)和規(guī)范,這也是基于瀏覽器的動(dòng)態(tài)語言JavaScript特性所造成的JavaScript框架眾多,很難有統(tǒng)一的實(shí)現(xiàn)標(biāo)準(zhǔn).為了更好地實(shí)現(xiàn)RBAC,很多學(xué)者提出服務(wù)器端和瀏覽器端共同協(xié)作權(quán)限控制方法[1],其特點(diǎn)是:用戶操作時(shí),瀏覽器端首先做的是簡單權(quán)限檢驗(yàn),瀏覽器端檢驗(yàn)通過以后服務(wù)器端再做最終權(quán)限檢驗(yàn).由于瀏覽器端的檢驗(yàn)非常簡單,這種方法在瀏覽器端沒有真正實(shí)現(xiàn)RBAC,而是將所有的操作直接暴露給用戶,當(dāng)用戶操作被服務(wù)端拒絕后,瀏覽器端提示用戶無法進(jìn)行該操作,這樣不但降低了用戶體驗(yàn)而且存在安全隱患.瀏覽器端實(shí)現(xiàn)RBAC的最佳效果是瀏覽器端對(duì)用戶有權(quán)限的內(nèi)容進(jìn)行加載并顯示,而對(duì)無權(quán)限的內(nèi)容則不加載不顯示,根據(jù)用戶權(quán)限動(dòng)態(tài)的顯示界面,實(shí)現(xiàn)“所見即所得”的效果.
設(shè)計(jì)的瀏覽器端模型依賴服務(wù)器端的RBAC模型,服務(wù)器端可使用常見的細(xì)粒度權(quán)限管理框架,如Spring Security Framework、Shiro等,也可自行設(shè)計(jì).瀏覽器端可以通過常見的JavaScript框架來實(shí)現(xiàn),如ExtJS、JQuery UI等.本文以Spring Security Frame?work和ExtJS為例來實(shí)現(xiàn)這個(gè)模型;在模型中,瀏覽器端和服務(wù)器端是依賴關(guān)系,瀏覽器端使用服務(wù)器端提供的動(dòng)態(tài)數(shù)據(jù)來初始化瀏覽器端的視圖.
1.1瀏覽器端的一些定義
在瀏覽器端提出“模塊”“操作面板”“操作欄”“操作”的概念.模塊(圖1的1部分),是針對(duì)某一項(xiàng)業(yè)務(wù)的,如“試題管理”“系統(tǒng)管理”等,一般使用TreePanel和Tree來表示.用戶選擇某個(gè)模塊,則會(huì)出現(xiàn)相應(yīng)的操作面板(圖1的2、3部分一起構(gòu)成操作面板),操作面板是用戶進(jìn)行真正操作的地方,用戶可以選擇某條數(shù)據(jù)進(jìn)行某種操作,操作面板一般使用GridPanel[2].操作欄(圖1的2部分)是操作面板的一部分,用戶選擇某條數(shù)據(jù)以后就可以在操作欄選擇相應(yīng)的操作,一般使用ToolBar.操作欄由很多操作組成,操作使用Button表示.在這個(gè)4個(gè)概念中,不同權(quán)限的用戶,其擁有的模塊和操作是不同的,實(shí)現(xiàn)瀏覽器端RBAC的關(guān)鍵是如何動(dòng)態(tài)地初始化模塊和操作.
圖1 瀏覽器界面示意圖
1.2服務(wù)器端數(shù)據(jù)表結(jié)構(gòu)
瀏覽器端的RBAC的實(shí)現(xiàn)依賴于服務(wù)器端的數(shù)據(jù),瀏覽器端使用該數(shù)據(jù)初始化模塊和操作.由于本文模型是細(xì)粒度的RBAC的實(shí)現(xiàn),所以不僅要對(duì)瀏覽器端的模塊實(shí)現(xiàn)RBAC,而且對(duì)于每個(gè)模塊上的操作也要實(shí)現(xiàn)RBAC.模型所涉及的數(shù)據(jù)表如表1所示.
表1 核心數(shù)據(jù)表結(jié)構(gòu)說明
其中涉及角色數(shù)據(jù)表如圖2所示.
圖2 涉及角色數(shù)據(jù)表結(jié)構(gòu)
各表之間的關(guān)聯(lián)關(guān)系分為兩種:一對(duì)多和多對(duì)多.模塊表和操作表是一對(duì)多的關(guān)系,在操作表里有一外鍵屬性,用于存儲(chǔ)操作對(duì)應(yīng)的模塊.角色與模塊、操作是多對(duì)多的關(guān)系,所以通過中間表(圖2)“角色模塊表”和“角色操作表”來實(shí)現(xiàn).按照這樣的數(shù)據(jù)庫設(shè)計(jì),并在表信息中加入瀏覽器端部分相關(guān)信息,就可以同時(shí)在服務(wù)器端通過Shiro或Spring Se?curity實(shí)現(xiàn)RBAC,這樣服務(wù)器端就能根據(jù)不同用戶的權(quán)限動(dòng)態(tài)為瀏覽器端提供模塊和操作的數(shù)據(jù).
1.3瀏覽器端模型
瀏覽器端模型的關(guān)鍵是如何利用登陸成功后服務(wù)器端返回的數(shù)據(jù)初始化瀏覽器界面.在“模塊”和“操作”概念里,“模塊”對(duì)應(yīng)TreePanel和TreeNode,“操作”對(duì)應(yīng)ToolBar的Button,初始化瀏覽器端也就是初始化TreePanel、TreeNode、ToolBar、Button等控件.初始化這些控件需要JSON[3]格式的數(shù)據(jù),初始化“模塊”和“操作”所用到的JSON格式數(shù)據(jù)分別與表1中的模塊表和操作表對(duì)應(yīng).數(shù)據(jù)轉(zhuǎn)化流程為模塊表、操作表——Java POJO對(duì)象——JSON數(shù)據(jù)——ExtJS的TreePanel、TreeNode、ToolBar、Button控件等.
JSON格式數(shù)據(jù)是初始化ExtJS控件的關(guān)鍵,在服務(wù)器端需要對(duì)Java POJO對(duì)象作適當(dāng)?shù)奶幚聿拍苄纬煞铣跏蓟疎xtJS控件的JSON數(shù)據(jù).模塊數(shù)據(jù)的JSON格式如下所示:
{
"id":3,
"chinese":"系統(tǒng)根模塊",
"iconClz":"root",
"orderNum":1,
"status":2,
"parent":1
}
id表示該模塊記錄在數(shù)據(jù)庫中的主鍵,chinese表示該模塊的中文名稱,iconClz表示該模塊使用圖標(biāo)的英文名稱,orderNum表示該模塊在同類中的順序,status表示模塊的狀態(tài),parent為該模塊的父模塊的主鍵.
操作數(shù)據(jù)的JSON格式如下:
{
"id":11,
"chinese":"創(chuàng)建",
"iconClz":"create",
"orderNum":1,
"status":0,
"moduleId":51
}
id表示該操作記錄在數(shù)據(jù)庫中的主鍵,chinese表示該操作的中文名稱,iconClz表示該操作使用圖標(biāo)的英文名稱,orderNum表示該圖標(biāo)在ToolBar中的順序,status表示操作的可用與否,moduleId是該操作所屬模塊的主鍵,用于確定操作屬于哪個(gè)模塊.
這樣的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)既適合關(guān)系型數(shù)據(jù)庫的存儲(chǔ),也適合瀏覽器端初始化TreePanel、TreeNode和ToolBar.
2.1工作流程
本模型的工作流程根據(jù)用戶的操作分為登錄和選擇模塊兩個(gè)部分,根據(jù)處理地點(diǎn)分為瀏覽器端和服務(wù)器端,如圖3所示.用戶進(jìn)行登錄操作,此時(shí)瀏覽器端發(fā)出登錄請(qǐng)求,服務(wù)端在接收到登錄請(qǐng)求后首先檢查用戶的合法性,如果用戶不合法則向?yàn)g覽器端返回錯(cuò)誤信息,如果用戶合法則獲取用戶所擁有的角色對(duì)應(yīng)的模塊和操作數(shù)據(jù)并將其返回給瀏覽器端.瀏覽器端在接收到服務(wù)器的響應(yīng)以后,如果是錯(cuò)誤信息則直接在頁面上顯示錯(cuò)誤信息,如果是正確信息,則提取并保存模塊和操作數(shù)據(jù),接著瀏覽器發(fā)生跳轉(zhuǎn),進(jìn)入管理界面,用保存的模塊和操作數(shù)據(jù)來初始化管理界面.選擇模塊,用戶在瀏覽器端選擇某一模塊,瀏覽器向服務(wù)端發(fā)出獲取文本的Ajax請(qǐng)求[4],服務(wù)器端在收到瀏覽器端的請(qǐng)求以后返回該模塊對(duì)應(yīng)的JavaScirpt文本,瀏覽器利用該文本通過eval將文本加入到JavaScript運(yùn)行環(huán)境中,接著瀏覽器端初始化圖1中的2部分和3部分,即ToolBar和操作面板,其中初始化ToolBar的數(shù)據(jù)是登錄后的瀏覽器端保存的操作數(shù)據(jù).
圖3 模型工作流程圖
2.2初始化模塊和操作的核心函數(shù)
在瀏覽器端獲得了模塊和操作的數(shù)據(jù)后,難點(diǎn)是如何將數(shù)據(jù)高效地轉(zhuǎn)換為JavaScript對(duì)象.因?yàn)橛袠浣Y(jié)構(gòu)的存在,初始化模塊和操作的函數(shù)主要通過遍歷和遞歸來完成.核心代碼如下所示:
function initBrowser(json)
{∥json為用戶登錄后返回的數(shù)據(jù)
var coms=json.data;
var userModule=$.makeArray(coms.userModule);∥獲取模塊
userCommand=$.makeArray(coms.userCommand);∥獲取操作
var_showModule=[];
$.each(userModule,getShowModule);∥獲取需要顯示的模塊
showModule=objArrayUnique(_showModule,"id");∥去除重復(fù)的模塊
new layout.viewport(showModule);∥完成顯示
function getShowModule(n,v)
{
while(v!=null)
{
_showModule.push(v);
v=v.parent;
}
}
}
initBrowser函數(shù)通過閉包、循環(huán)遍歷完成了圖1 的1部分模塊樹的初始化.json變量為用戶登錄后返回的數(shù)據(jù),其中json.data為模塊和操作的數(shù)據(jù).json不是JavaScript中的數(shù)組,需要通過$.makeArray函數(shù)將json轉(zhuǎn)換成數(shù)組.coms.userModule是模塊數(shù)據(jù),是從操作中提取的,由于模塊與操作是一對(duì)多的關(guān)系,所以從操作中提取的模塊是有重復(fù)的,需要通過自定義的objArrayUnique函數(shù)來去重.
在實(shí)際開發(fā)中應(yīng)用此模型簡單方便,使用過程如下:
1)在Web工程中引入通用JavaScript文件.這些文件主要分兩類:一類是通用函數(shù)的JavaScript文件,包括該模型里用到的通用函數(shù)、初始化模塊和操作的核心函數(shù)、生成并初始化ExtJS的ToolBar控件的函數(shù)、生成并初始化ExtJS的Combox控件的函數(shù);另一類是Web系統(tǒng)常用模塊的JavaScript文件,如“系統(tǒng)管理”“用戶管理”“權(quán)限管理”等.
2)添加服務(wù)器端數(shù)據(jù)庫的數(shù)據(jù)表.該過程通過運(yùn)行數(shù)據(jù)庫初始化腳本完成,數(shù)據(jù)庫初始化腳本包含了模型全部用到的數(shù)據(jù)表,主要為表1中所列舉的數(shù)據(jù)表,另外初始化過程也會(huì)往數(shù)據(jù)庫追加一些基礎(chǔ)的數(shù)據(jù)記錄,例如Web系統(tǒng)常用的模塊和操作的數(shù)據(jù).
3)往數(shù)據(jù)庫的模塊及操作表增加開發(fā)中的模塊、操作具體信息[5].信息包括模塊信息和全部操作信息,對(duì)應(yīng)表1中的“模塊表”和“操作表”.由于模塊之間、模塊與操作之間存在一對(duì)多的關(guān)系,所以,在創(chuàng)建模塊和操作的時(shí)候必須指定模塊和操作屬于哪個(gè)模塊.添加模塊如圖4所示.
圖4 新增模塊示意圖
4)編寫瀏覽器端JavaScript代碼,按照模型的代碼規(guī)范編寫瀏覽器端的JavaScript代碼.代碼規(guī)范是模型的一部分,沒有統(tǒng)一的代碼規(guī)范,就無法實(shí)現(xiàn)真正的瀏覽器端的RBAC.代碼規(guī)范雖然在一定程度上約束了開發(fā)者,但是在開發(fā)者熟練掌握代碼規(guī)范以后也可以實(shí)現(xiàn)快速開發(fā),同時(shí)后期維護(hù)人員在掌握代碼規(guī)范以后也可以進(jìn)行代碼維護(hù).
5)為角色分配模塊的操作權(quán)限.如圖5所示,當(dāng)前選中的角色擁有“題庫管理”模塊,該模塊擁有子模塊“課程管理”,并且當(dāng)前的角色擁有“課程管理”的“創(chuàng)建”和“刪除”操作.用戶可通過勾選和取消勾選來完成權(quán)限管理.
圖5 為角色分配權(quán)限示意圖
本文提出瀏覽器端模型有以下優(yōu)點(diǎn):第一,通過模型可以在瀏覽器端實(shí)現(xiàn)RBAC模型,在瀏覽器端就杜絕了用戶的非法操作,提高了系統(tǒng)的安全性,給用戶“所見即所得”的用戶體驗(yàn);第二,使用該模型能簡化、規(guī)范瀏覽器端代碼的開發(fā),瀏覽器端開發(fā)工程師可以借助該模型快速進(jìn)行操作界面的編碼,同時(shí)代碼也得到規(guī)范統(tǒng)一,有助于后續(xù)的代碼維護(hù)工作.同時(shí)模型存在以下需改進(jìn)的地方:界面初始化核心函數(shù)需改進(jìn)性能,由于界面層使用到樹控件,所以在初始化過程中使用到遞歸,隨著樹的數(shù)據(jù)增加,遞歸的時(shí)間會(huì)變長,加上網(wǎng)速的影響,瀏覽器端的初始化可能會(huì)很慢;可移植性有待提高,模型目前只能應(yīng)用在ExtJS上,除了ExtJS還有其他主流JavaScript庫如jQuery UI、Dojo等沒有試驗(yàn),需要繼續(xù)改進(jìn)模型的通用性,使其框架能被簡單地移植到其他JavaS?crip庫;實(shí)際使用中步驟過多,初學(xué)者不易將模型集成到自己的Web工程中,需要簡化合并使用過程,改進(jìn)模型的集成性.
[1] 吳波,王晶.基于基本RBAC模型的權(quán)限管理框架的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011(4):32-36.
[2] 張鵬偉,陳景霞,張文平,等.基于ExtJS和SSH的Web應(yīng)用架構(gòu)的研究與實(shí)現(xiàn)[J].陜西科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2010(6):15-19.
[3]高靜.JSON序列化機(jī)制與傳輸效率研究[D].濟(jì)南:山東師范大學(xué),2011.
[4]熊海東,陳亞軍,潘剛.基于Ajax的動(dòng)態(tài)JavaScript文件加載模型[J].西昌學(xué)院學(xué)報(bào)(自然科學(xué)版),2011(3):52-54.
[5]劉強(qiáng),王磊,何琳.RBAC模型研究歷程中的系列問題分析[J].計(jì)算機(jī)科學(xué),2012(11):12-16.
(編校:李青)
Role-Based Access Control(RBAC)Modelon the Brow ser Side
XIONGHaidong1,XUDe2,PANGang3,PENG Zhiyong4
(1.Teaching Affairs Department,Sichuan Preschool EducatorsCollege,Mianyang,Sichuan 621700,China;2.WulumuqiCentral Subbranch of the People's Bank ofChina,Wulumuqi,Xinjiang 832000,China;3.Department ofComputer,Sichuan University ofArtsand Science,Dazhou,Sichuan 635000,China;4.Organization Department,KailiUniversity,KaiLi,Guizhou 556011,China)
Achieving Role-Based Access Control(RBAC)is one necessary condition for a B/Sor C/S system's security.On the server side,implementation of RBAC hasmature programs,while no standard solution is yet provided for the browser side.To achieve RBAC on the browser side,based on ExtJS framework,the conceptofmodules and action bar was proved,and the RBACmodelon the browser sidewas designed.Themodeluses data from the server side to achieve the RBAC of the browser side.The application of themodel in the actual project not only achieved the RBAC on the browser side,butalso provided standardsand norms for the developmentof the browser side.It improves the development efficiency and the specification ofsystem source code.
RBACmodel;browser side;ExtJS;Spring Security;item bank
TP311
A
1671-5365(2015)06-0066-04
2014-09-01修回:2014-10-15
四川幼兒師范高等??茖W(xué)校校級(jí)重點(diǎn)課題(SCYZZD201201)
熊海東(1986-),男,助教,碩士研究生,研究方向?yàn)镴avaWeb、大數(shù)據(jù)
網(wǎng)絡(luò)出版時(shí)間:2014-10-30 14:43網(wǎng)絡(luò)出版地址:http://www.cnki.net/kcms/detail/51.1630.Z.20141030.1443.001.html
引用格式:熊海東,徐德,潘剛,等.一種瀏覽器端RBAC模型[J].宜賓學(xué)院學(xué)報(bào),2015,15(6):66-69.