施 鷺
(蕪湖職業技術學院 網絡工程學院,安徽 蕪湖 241003)
高校每年組織各院系學生與教師開展學科競賽、技能大賽等活動,傳統的報名和作品提交等工作費時費力,效率低,前期筆者與多個高校的教師和教學科研管理人員進行溝通、座談,發現尚未有一套服務于高校學生參賽并可同時滿足多用戶、多角色使用需求的系統。
基于這些現狀設計開發一套系統,以完成學生注冊、項目報名、作品提交、人員組織等工作,同時對不同用戶分配不同的使用權限。系統選用流行的Spring技術作為后端開發框架,選擇SpringSecurity框架來實現基于角色的訪問控制(Role-Based Access Control,RBAC)的權限管理模型,設計開發出通用的高校項目報名和作品提交系統。
這種必要性首先是出于安全性的考慮,比如誤操作、人為破壞、數據泄露等情況。比如,對于數據庫的訪問,數據庫管理員具有較高的權限;軟件開發人員則使用普通的數據庫賬號,其操作權限受到限制。這樣的設計旨在防止開發人員對數據造成破壞性的操作。從數據隔離的角度來看,各部門負責人可以看到各自部門的員工信息。
RBAC模型中權限與角色相關聯,用戶通過成為相應的角色成員而得到這些角色的權限。角色是為了完成某種工作而被創造出來的,用戶則根據其責任而被指派成相應的角色。圖1給出了RBAC模型中元素的相互關系。

圖1 RBAC模型
用戶可從一個角色被指派成另一個角色,可根據需求合并等條件而被賦予新的權限,而某個角色的權限也可被收回。
基于RBAC模型實現的權限管理系統已經完成了權限關系模型的抽象化處理,開發人員只需要根據軟件系統的實際使用場景完成編碼實現工作即可。該系統可提供如下管理:1)角色管理功能,即由管理員定義角色并給角色賦予權限;2)“用戶-角色”管理界面,由管理員給系統中用戶賦予角色;3)支持用戶定義權限,即在新增功能時可以將需要保護的功能添加到系統。
系統管理員一般為學校的科研管理人員,負責維護所有的基礎數據(包括二級學院數據的維護)和項目數據。
系部管理員一般為系部的學生活動負責老師,其職責是系部的數據維護,包括各個專業數據、班級數據、學生數據的維護工作。
項目負責老師一般為全校的專職教師,負責指導學生參與競賽活動,其職責包括項目的數據維護、報名表的數據維護、報名數據統計及項目作品的下載。
普通學生選擇參與項目,完成項目作品提交,維護個人數據等。
首先是開發環境的搭建。設計人員使用流行的SSM(Spring+SpringMVC+MyBatis)框架作為后端的開發工具,選擇SpringSecurity作為權限管理的框架,創建好Maven類型的項目,并利用pom.xml文件配置完成整個系統所需要的各個依賴組件包和用于編譯、調試、運行及部署的插件。
在SSM框架整合完畢后,設計人員在系統中加入SpringSecurity依賴,以完成spring-security.xml核心文件的配置,主要完成不攔截的資源、攔截規則、定義跳轉的頁面、關閉跨域請求、加密的方式及加密類這幾個關鍵參數的設置。
其次是配置SpringSecurity使用數據庫認證。使用自定義的UserDetails和UserDetailsService工具類來完成設置。其中,loadUserByUsername方法提供給用戶的控制層(controller)來調用,該方法接收主調者傳入的用戶名參數進行數據庫查詢,將得到的結果數據封裝成為UserDetail對象并返回給主調者,然后,配置完成自定義頁面login.html、success.html、failer.html等,以實現當認證成功、失敗或注銷賬號時跳轉到指定路徑地址的頁面。
系統需要用戶、角色、權限、訪問記錄日志等表結構,表users、role、user_role、permisson、role_pemisson對應了權限模型中的用戶、角色和資源權限。通過表user_role和role_permission,可以實現用戶和角色、角色和資源權限的關聯關系。系統的業務場景是學生項目報名和作品上傳,還需要系部表、專業表、班級表、學生表、教師表、項目表、項目報名表、操作日志記錄表等。權限模型數據庫表結構如圖2所示。

圖2 權限模型數據庫表結構
系統基礎數據的維護及實現流程如下:使用系統管理員賬號登錄系統,經過權限系統認證成功后獲取系統管理員角色權限;直接進入系統后臺基礎數據的管理頁面,可以查看到學校所有系部(二級學院)數據,也可以查看到已有的全部項目及項目負責老師的數據,還可以對這些系統基礎數據進行數據增刪改查維護工作。此處最核心的配置有2個:1)系統管理員創建新項目,分配該項目的負責教師;2)管理每個系部(二級學院)的信息,其中包括設置該系部的系部管理員。
系部基礎數據的維護及實現流程為:使用系部管理員賬號登錄系統,認證成功后即可獲取系部管理員角色權限;進入系統后臺系部信息管理頁面,可查看到本賬號所在系部的基本數據、系部的所有專業列表、專業所包含的班級列表以及每個班級所包含的學生列表,并對這些數據進行“增加、刪除、讀取、更新”的操作。
項目數據管理維護及實現流程為:項目負責老師登錄系統,經認證后獲取角色權限,進入項目管理頁面后可查看項目的基本信息和學生報名表數據(包含所提交的作品文件)。另外,系統還提供一鍵打包下載功能,其具體的實現過程如下:后臺提供單獨的觸發按鈕,用戶點擊后,系統啟動生成報名表PDF文件和上傳作品文件的壓縮服務;服務完成后,頁面上的立即下載按鈕變成可點擊狀態,用戶點擊后通過瀏覽器或專門的下載工具下載打包的壓縮文件;下載完成后,后臺服務器定時刪除該打包文件,以釋放服務器磁盤空間,節約資源。
項目報名和作品提交實現流程如下:學生注冊賬號后經系部管理員審核通過,在登錄后進入項目報名和作品提交流程;在首頁可以查看當前正在接收報名的項目列表,選擇項目后填寫報名表信息,提交并上傳文件,完成報名表的填寫和作品提交。
系統各角色使用各自的登錄賬號通過統一的登錄入口頁面登錄成功后,即可獲得該賬號的角色信息和權限列表信息,不同角色的可訪問和操作對象就受到不同的限制。
從菜單權限來看,對于不同賬號的人,顯示的可操作模塊也不同。比如,按鈕權限的控制由SpringSecurity頁面端的標簽權限控制來實現。在顯示項目詳情頁時,系統管理員可以操作一鍵下載按鈕,而項目管理員則不可以執行此操作。
從數據訪問權限來看,在Controller層代碼進行了權限控制判斷;在項目列表頁面來看,系統管理員可查詢所有項目數據并可看到全部項目列表數據,而項目管理員只可看到自己的項目列表數據。
在項目的后期推廣及使用過程中,不同的學校可能對于一些訪問控制權限的使用有不同的需求,因此系統對于項目數據的多個功能級別的訪問設計出了可配置的方案。比如,就每個項目本身的實時報名數據和報名統計數據圖表是對所有角色開放查看還是只開放給項目管理員和系統管理員查看,可以由系統管理員在系統的管理后臺統一設置。
本系統于2018年3月開發完成并上線部署,每年多次服務學生學科競賽和大學生各類活動的報名和作品提交,取得了一定的社會效益。在學校大學生科技創新、創業大賽中,本項目承擔了大賽的學生報名、作品上交、作品打包下載、數據統計展現等工作,取得了較好的實際效果。
該項目在使用過程中,由學??蒲胁块T或創業中心部門的管理員,創建項目并設置項目管理員角色賬號,學生注冊系統后進行項目作品提交,各個項目管理員根據自身賬號權限,完成本項目學生作品數據管理??偟捻椖抗芾砗笈_頁面如圖3所示。在后續工作中,將繼續完善系統的功能,比如增加學生數據的批量導入、更多的統計報表數據輸出以及一定的數據分析。

圖3 項目管理后臺頁面