楊 晟,羅 奇
(湖南信息職業(yè)技術(shù)學(xué)院,湖南 長沙 410200)
權(quán)限管理功能是信息管理系統(tǒng)不可或缺的重要組成部分,是保證信息系統(tǒng)安全性的前提和基礎(chǔ)[1-2]。權(quán)限管理可以對用戶的登錄進(jìn)行驗(yàn)證,對系統(tǒng)的資源訪問進(jìn)行鑒權(quán),防止用戶對系統(tǒng)越權(quán)使用,保障數(shù)據(jù)在采集、存儲(chǔ)和傳輸過程中的安全性?;诮巧脑L問控制(Role-Base Access Control,RBAC)模型是當(dāng)前比較主流的一種權(quán)限管理方式。RBAC模型包含了用戶、角色和權(quán)限三大實(shí)體[3],通過為用戶分配角色,以及為角色分配權(quán)限,可以批量為用戶賦予相同的權(quán)限[4]。由于角色與權(quán)限之間的關(guān)系相對穩(wěn)定,RBAC通過角色的使用實(shí)現(xiàn)了用戶與權(quán)限之間的邏輯分離,大大提高了權(quán)限管理的便捷度[5-6]。隨著系統(tǒng)復(fù)雜度以及用戶種類的增加,權(quán)限管理問題也隨之變得更為復(fù)雜[7]。特別是對于包含多個(gè)業(yè)務(wù)應(yīng)用的系統(tǒng),往往需要對每個(gè)業(yè)務(wù)應(yīng)用都進(jìn)行權(quán)限控制,因此設(shè)計(jì)一款通用的權(quán)限管理系統(tǒng)已成為信息系統(tǒng)開發(fā)中的重點(diǎn)需求。本文設(shè)計(jì)了一個(gè)基于RBAC的通用權(quán)限管理系統(tǒng),采用Spring Boot技術(shù)進(jìn)行開發(fā),通過提供對用戶、角色以及權(quán)限信息的管理,設(shè)置它們之間的關(guān)系來控制不同用戶對資源的操作權(quán)限。同時(shí),還可支持對多個(gè)業(yè)務(wù)應(yīng)用的統(tǒng)一權(quán)限管理,業(yè)務(wù)系統(tǒng)開發(fā)完成后,只需要集成通用權(quán)限管理系統(tǒng),便能實(shí)現(xiàn)對業(yè)務(wù)系統(tǒng)的訪問控制。
1.1.1 社會(huì)可行性
權(quán)限管理負(fù)責(zé)保護(hù)數(shù)據(jù)安全,防止其被破壞、篡改或泄露,是應(yīng)用軟件正常運(yùn)行的基本安全保障。權(quán)限管理的基本原理是為系統(tǒng)中的每一個(gè)操作定義好所需要的權(quán)限,并根據(jù)用戶工作內(nèi)容的需要,為用戶分配好特定的權(quán)限,以方便其對指定資源的訪問。不同等級的權(quán)限可以訪問的資源可能截然不同,當(dāng)用戶在業(yè)務(wù)系統(tǒng)中訪問某個(gè)資源時(shí),權(quán)限管理功能只需要判斷,當(dāng)前用戶已分配的所有資源訪問權(quán)限中是否包含當(dāng)前訪問所需要的權(quán)限。若包含,則允許用戶繼續(xù)執(zhí)行對當(dāng)前資源的訪問,反之則拒絕用戶的操作要求。權(quán)限管理根據(jù)職位分工的不同為不同用戶分配不同的資源訪問權(quán)限,并通過鑒權(quán)防止用戶的越權(quán)操作,避免用戶的失誤操作或惡意訪問,保障了系統(tǒng)資源的安全性。而對于包含多個(gè)業(yè)務(wù)應(yīng)用的復(fù)雜系統(tǒng),若針對每個(gè)應(yīng)用設(shè)計(jì)一套權(quán)限管理功能則不僅開發(fā)過程十分繁瑣,而且會(huì)增加系統(tǒng)上線后管理的復(fù)雜度,費(fèi)時(shí)費(fèi)力,容易造成人力和物力資源的極大浪費(fèi)。因此,設(shè)計(jì)出一款通用的權(quán)限管理系統(tǒng),讓多個(gè)業(yè)務(wù)系統(tǒng)只需集成到通用權(quán)限管理系統(tǒng),即可實(shí)現(xiàn)對業(yè)務(wù)系統(tǒng)權(quán)限功能的集中統(tǒng)一管理,便顯得尤為重要。因此,設(shè)計(jì)一款通用的權(quán)限管理系統(tǒng)已成為信息系統(tǒng)開發(fā)中的重點(diǎn)需求,可以有效節(jié)約多業(yè)務(wù)應(yīng)用系統(tǒng)的開發(fā)成本,促進(jìn)社會(huì)信息化的發(fā)展。
1.1.2 技術(shù)可行性
本系統(tǒng)采用B/S架構(gòu),用戶在使用本系統(tǒng)時(shí)無需安裝客戶端軟件,只需要通過瀏覽器即可進(jìn)行訪問。系統(tǒng)運(yùn)用MVC開發(fā)模式,實(shí)現(xiàn)前后端分離。其中后端以Java作為開發(fā)語言,由于Java具有高度的可移植性,因此系統(tǒng)可以部署在任意操作系統(tǒng)的服務(wù)器上。以Spring Boot+MyBatis作為開發(fā)框架,采用MySQL數(shù)據(jù)庫技術(shù)來進(jìn)行數(shù)據(jù)的存儲(chǔ),并使用Maven來進(jìn)行系統(tǒng)資源的管理和項(xiàng)目的構(gòu)建,采用GIT進(jìn)行代碼版本控制;前端采用Bootstrap+jQuery作為開發(fā)框架,并使用AJAX技術(shù)和后端進(jìn)行數(shù)據(jù)交互。以上技術(shù)都是當(dāng)前成熟且主流的技術(shù),因此采用上述技術(shù)進(jìn)行設(shè)計(jì)開發(fā)通用權(quán)限管理系統(tǒng)是可行的。
權(quán)限管理功能讓不同身份的用戶,具有對系統(tǒng)資源的不同操作權(quán)限,以達(dá)到避免越權(quán)操作、提高系統(tǒng)資源安全性的目的。對于包含多個(gè)業(yè)務(wù)應(yīng)用的信息系統(tǒng),其權(quán)限管理必定十分復(fù)雜。通用權(quán)限管理系統(tǒng)能夠集成到多個(gè)業(yè)務(wù)系統(tǒng)中,對業(yè)務(wù)系統(tǒng)中的權(quán)限控制進(jìn)行統(tǒng)一的管理,節(jié)約開發(fā)及管理成本。系統(tǒng)總體功能有用戶信息管理、角色信息管理、權(quán)限信息管理、組織機(jī)構(gòu)管理、應(yīng)用系統(tǒng)管理和菜單信息管理6個(gè)部分。并且,權(quán)限管理系統(tǒng)還應(yīng)支持對用戶令牌的驗(yàn)證、登錄時(shí)賬戶密碼的驗(yàn)證以及對用戶操作的鑒權(quán)。
1.3.1 數(shù)據(jù)安全性
系統(tǒng)數(shù)據(jù)安全是至關(guān)重要的,系統(tǒng)要保證系統(tǒng)敏感數(shù)據(jù)的安全,要求對一些安全級別較高的數(shù)據(jù)采用加密的方式,防止一些不法分子通過注入來獲取甚至篡改數(shù)據(jù),關(guān)閉通過HTTP方式實(shí)現(xiàn)數(shù)據(jù)訪問模式,只允許系統(tǒng)超級管理員訪問權(quán)限管理系統(tǒng)。
1.3.2 實(shí)時(shí)性
由于業(yè)務(wù)系統(tǒng)的所有訪問都需要請求權(quán)限管理系統(tǒng)進(jìn)行鑒權(quán),當(dāng)用戶訪問業(yè)務(wù)系統(tǒng)時(shí),不僅要等待業(yè)務(wù)系統(tǒng)的響應(yīng),中間還要等待權(quán)限管理系統(tǒng)的鑒權(quán)響應(yīng)。為了不讓用戶在操作時(shí)等待過長時(shí)間,必須提高權(quán)限管理系統(tǒng)的響應(yīng)速度,鑒權(quán)響應(yīng)時(shí)間不能超過1 s。
1.3.3 可擴(kuò)展性
隨著時(shí)間的推移,系統(tǒng)往往會(huì)伴隨著業(yè)務(wù)需求的變動(dòng)。而如果對系統(tǒng)進(jìn)行重新設(shè)計(jì)開發(fā)則容易造成人力、物力資源的浪費(fèi),因此往往會(huì)在原系統(tǒng)的基礎(chǔ)上進(jìn)行升級。為了保證能夠順利完成更新升級,系統(tǒng)必須要具有良好的可擴(kuò)展性。首先系統(tǒng)在設(shè)計(jì)時(shí)需要采用MVC模式,實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯層、數(shù)據(jù)層和表現(xiàn)層相分離,使得當(dāng)某一層級發(fā)生改變時(shí),其他層級不發(fā)生變動(dòng)或者變動(dòng)較小;其次遵循“高內(nèi)聚、低耦合”的思路,對系統(tǒng)功能進(jìn)行模塊化設(shè)計(jì),保持各個(gè)模塊之間的相對獨(dú)立性,當(dāng)一個(gè)模塊發(fā)生異常時(shí),其他模塊仍然可以正常使用,并且在維護(hù)時(shí)還可以快速定位到異常發(fā)生的位置。最后,在開發(fā)時(shí)必須嚴(yán)格按照標(biāo)準(zhǔn)化要求進(jìn)行文檔和代碼的編寫,充分考慮將來系統(tǒng)擴(kuò)展的需求,預(yù)留好相應(yīng)的接口和方法。
2.1.1 用戶信息管理模塊設(shè)計(jì)
管理員登錄系統(tǒng)后,可以對用戶信息進(jìn)行維護(hù):包括添加用戶信息、修改用戶信息、查詢用戶信息、刪除用戶信息和凍結(jié)/解凍用戶等操作。用戶管理模塊中包含了所有能夠訪問業(yè)務(wù)系統(tǒng)的用戶信息,用戶信息中包含了用戶登錄系統(tǒng)的賬號和密碼。當(dāng)用戶被創(chuàng)建時(shí),系統(tǒng)將會(huì)為用戶指定一個(gè)初始密碼,初始密碼是一個(gè)隨機(jī)字符組合,初始密碼將以郵箱的形式發(fā)送給用戶。當(dāng)用戶首次登錄系統(tǒng)時(shí),需要修改密碼。當(dāng)用戶忘記密碼時(shí),系統(tǒng)支持用戶根據(jù)郵箱找回密碼。只有當(dāng)用戶賬戶被創(chuàng)建后,該用戶才能訪問業(yè)務(wù)系統(tǒng),若用戶被刪除則無法再使用系統(tǒng)。同時(shí),系統(tǒng)支持對用戶賬戶的凍結(jié)和解凍,管理員可以對任意賬戶進(jìn)行凍結(jié)和解凍。用戶被凍結(jié)后,將無法使用系統(tǒng),直至解凍后方可繼續(xù)使用系統(tǒng)。
2.1.2 組織機(jī)構(gòu)管理模塊設(shè)計(jì)
為了使系統(tǒng)適應(yīng)不同規(guī)模的管理需要,保障系統(tǒng)在規(guī)模龐大、組織機(jī)構(gòu)復(fù)雜的單位中順利運(yùn)行。系統(tǒng)在RBAC的基礎(chǔ)上,還添加了對組織機(jī)構(gòu)的管理。管理員登錄系統(tǒng)后可以對組織機(jī)構(gòu)進(jìn)行維護(hù),包括添加組織機(jī)構(gòu)信息、修改組織機(jī)構(gòu)信息、查詢組織信息以及刪除組織機(jī)構(gòu)信息等操作。同時(shí),系統(tǒng)還支持樹形結(jié)構(gòu)的機(jī)構(gòu)管理,以構(gòu)建組織機(jī)構(gòu)的層級關(guān)系,即每個(gè)組織機(jī)構(gòu)下可以創(chuàng)建若干個(gè)子組織機(jī)構(gòu),而每個(gè)子組織機(jī)構(gòu)依然可以根據(jù)需要?jiǎng)?chuàng)建下屬機(jī)構(gòu),使得管理者可以方便快捷地根據(jù)組織規(guī)模需要添加下屬公司、單位、機(jī)構(gòu)和部門等。
2.1.3 角色信息管理模塊設(shè)計(jì)
基于角色的訪問控制是目前比較流行的一種權(quán)限管理方案,實(shí)現(xiàn)了用戶與權(quán)限之間的邏輯分離。所有角色創(chuàng)建在組織機(jī)構(gòu)下,每個(gè)組織機(jī)構(gòu)根據(jù)需要可以創(chuàng)建不同的角色信息。管理員登錄系統(tǒng)后,可以對角色信息進(jìn)行維護(hù),包括添加角色信息、修改角色信息、查詢角色信息和刪除角色信息等操作。此外,管理員還可以給用戶分配角色,一個(gè)用戶可以分配多個(gè)角色,并且這些角色可以屬于不同的組織機(jī)構(gòu),同一個(gè)角色也可以分配給多個(gè)不同的用戶。
2.1.4 應(yīng)用信息管理模塊設(shè)計(jì)
除了本權(quán)限管理系統(tǒng)外,系統(tǒng)還需要支持添加若干業(yè)務(wù)應(yīng)用系統(tǒng)。為了支持不同的應(yīng)用擁有不同的菜單及權(quán)限,并方便對多個(gè)應(yīng)用的登錄及鑒權(quán)進(jìn)行統(tǒng)一管理,系統(tǒng)添加了對業(yè)務(wù)應(yīng)用系統(tǒng)的管理,包括添加應(yīng)用信息、修改應(yīng)用信息和刪除應(yīng)用信息等操作。
2.1.5 菜單信息管理模塊設(shè)計(jì)
為了保證不同角色的用戶登錄后會(huì)進(jìn)入到不同的頁面,執(zhí)行不同的操作,首先需要讓不同用戶擁有不同的菜單。所有菜單信息都創(chuàng)建在應(yīng)用下,每個(gè)應(yīng)用根據(jù)需要可以創(chuàng)建不同的菜單信息。管理員登錄系統(tǒng)后,可以對菜單信息進(jìn)行維護(hù),包括添加菜單信息、修改菜單信息、查詢菜單信息和刪除菜單信息。管理員還可以為角色分配菜單,一個(gè)角色可以分配多個(gè)菜單,并且這些菜單可以屬于不同的應(yīng)用。
2.1.6 權(quán)限信息管理模塊設(shè)計(jì)
為了支持不同角色的用戶擁有不同的操作權(quán)限,系統(tǒng)添加了對具體操作權(quán)限的定義和維護(hù),包括添加權(quán)限信息、修改權(quán)限信息、查詢權(quán)限信息和刪除權(quán)限信息。每個(gè)權(quán)限代表對系統(tǒng)中不同資源的操作功能,當(dāng)用戶具有某項(xiàng)權(quán)限時(shí),便能對指定資源執(zhí)行對應(yīng)的操作。所有權(quán)限信息都創(chuàng)建在應(yīng)用下,每個(gè)應(yīng)用根據(jù)需要可以創(chuàng)建不同的權(quán)限信息。此外,管理員還可以為角色分配權(quán)限,一個(gè)角色可以分配多個(gè)權(quán)限,并且這些權(quán)限可以屬于不同的應(yīng)用。
2.2.1 用戶登錄過程設(shè)計(jì)
為了保證系統(tǒng)運(yùn)行的安全性,避免數(shù)據(jù)被惡意獲取和篡改。系統(tǒng)所有功能都必須在用戶成功登錄后才能訪問,并使用SHA-256哈希算法對數(shù)據(jù)庫中的用戶密碼進(jìn)行加密,防止用戶密碼泄露。當(dāng)用戶訪問業(yè)務(wù)系統(tǒng)時(shí),業(yè)務(wù)系統(tǒng)首先判斷用戶是否登錄,若未登錄,則判斷當(dāng)前用戶的Cookie中是否包含令牌,若不包含令牌,則強(qiáng)制跳轉(zhuǎn)到登錄頁面,提示用戶先輸入用戶名密碼進(jìn)行登錄才能訪問系統(tǒng)。若用戶包含令牌,則業(yè)務(wù)系統(tǒng)將請求權(quán)限管理系統(tǒng)判斷用戶令牌是否有效,若無效,則跳轉(zhuǎn)到登錄頁面,提示用戶輸入用戶名密碼。用戶輸入用戶名和密碼后,業(yè)務(wù)系統(tǒng)將請求權(quán)限管理系統(tǒng)進(jìn)行驗(yàn)證,驗(yàn)證通過即可登錄成功。
2.2.2 用戶操作權(quán)限控制
為了控制不同用戶的操作權(quán)限,防止越權(quán)訪問,系統(tǒng)對于用戶的每一個(gè)操作都要進(jìn)行鑒權(quán)。當(dāng)用戶登錄成功時(shí),權(quán)限管理系統(tǒng)將從數(shù)據(jù)庫中讀取用戶的所有操作權(quán)限信息,并將這些權(quán)限信息作為集合存儲(chǔ)到內(nèi)存中,并使用用戶的身份信息作為索引,建立起用戶身份信息和權(quán)限集合信息的對應(yīng)關(guān)系。當(dāng)用戶在業(yè)務(wù)系統(tǒng)中發(fā)出執(zhí)行某項(xiàng)操作的請求時(shí),業(yè)務(wù)系統(tǒng)將首先請求通用權(quán)限管理系統(tǒng)進(jìn)行鑒權(quán)。業(yè)務(wù)系統(tǒng)只需要將用戶的身份信息和指定操作所需的權(quán)限信息傳入到通用權(quán)限管理系統(tǒng)的鑒權(quán)接口,然后根據(jù)其返回結(jié)果即可確定用戶是否具有執(zhí)行該項(xiàng)操作的權(quán)限。通用權(quán)限管理系統(tǒng)接收到業(yè)務(wù)系統(tǒng)的鑒權(quán)請求后,則根據(jù)用戶的身份信息獲取前用戶存儲(chǔ)在內(nèi)存中的權(quán)限信息集合,判斷該集合中是否包含執(zhí)行當(dāng)前操作所需的指定操作權(quán)限,并將鑒權(quán)結(jié)果返回給業(yè)務(wù)系統(tǒng)。若當(dāng)前用戶包含對應(yīng)的操作權(quán)限,業(yè)務(wù)系統(tǒng)則允許用戶進(jìn)行操作,反之則禁止用戶執(zhí)行當(dāng)前操作,并強(qiáng)制用戶退出當(dāng)前系統(tǒng)。
本系統(tǒng)采用開源的MySQL數(shù)據(jù)庫系統(tǒng)進(jìn)行數(shù)據(jù)存儲(chǔ)。完成系統(tǒng)功能所需的數(shù)據(jù)表有用戶信息表、組織機(jī)構(gòu)信息表、角色信息表等。數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)為:用戶信息表(用戶id、用戶名、密碼、昵稱、性別、聯(lián)系電話、電子郵箱地址、角色編碼、刪除標(biāo)志位、創(chuàng)建人id、創(chuàng)建時(shí)間、修改人id和修改時(shí)間);組織機(jī)構(gòu)信息表(組織機(jī)構(gòu)id、組織機(jī)構(gòu)編碼、組織機(jī)構(gòu)名稱、刪除標(biāo)志位、創(chuàng)建人id、創(chuàng)建時(shí)間、修改人id和修改時(shí)間);角色信息表(角色id、角色編碼、角色名稱、父角色id、組織機(jī)構(gòu)id、刪除標(biāo)志位、創(chuàng)建人id、創(chuàng)建時(shí)間、修改人id和修改時(shí)間);應(yīng)用信息表(應(yīng)用id、應(yīng)用編碼、應(yīng)用名稱、刪除標(biāo)志位、創(chuàng)建人id、創(chuàng)建時(shí)間、修改人id和修改時(shí)間);菜單信息表(菜單id、應(yīng)用id、菜單標(biāo)題、父菜單id、菜單級別、菜單url、菜單類型、刪除標(biāo)志位、創(chuàng)建人id、創(chuàng)建時(shí)間、修改人id和修改時(shí)間);權(quán)限信息表(權(quán)限id、操作名稱、操作編碼、刪除標(biāo)志位、創(chuàng)建人id、創(chuàng)建時(shí)間、修改人id和修改時(shí)間);用戶角色關(guān)聯(lián)表(用戶id、角色id);角色菜單關(guān)聯(lián)表(角色id、菜單id);角色權(quán)限關(guān)聯(lián)表(角色id、權(quán)限id)。
本文設(shè)計(jì)了一款通用的權(quán)限管理系統(tǒng),能夠?qū)崿F(xiàn)對業(yè)務(wù)系統(tǒng)的資源訪問進(jìn)行控制,防止越權(quán)操作,保障系統(tǒng)安全,并且能方便快捷地集成到多業(yè)務(wù)應(yīng)用中,實(shí)現(xiàn)權(quán)限管控的集中統(tǒng)一管理,可以有效提高信息系統(tǒng)的開發(fā)效率,節(jié)約權(quán)限管理成本。