程磊, 程俊達, 嚴明, 王嘉威, 張小貝
(上海大學 上海先進通信與數據科學研究院,上海 200444)
隨著我國人均收入水平的提高,人們對自身和家人的安全越來越重視。買保險的人越來越多,我國總體的保費也逐年升高[1]。我所在的實習公司的主要業務就是提供網上保險投保服務。后臺運營管理系統主要是對我們公司安卓端、IOS端、HTML5端的保險業務提供支撐、數據統計和運營維護而統一的運營管理平臺。隨著公司保險業務越來越大,后臺運營管理系統也越來越復雜,使用的人員也越來越多,由于業務數據的敏感性和隱私性,必須要對運維后臺系統用戶的權限進行管理,使每個人都只能進行符合自己權限范圍類的操作,從而保證數據的安全。我所在的小組設計并實現了后臺運營管理平臺權限系統。以往的權限系統一般都是企業在項目中的一部分,而我們開發的權限系統使用了當前主流的SOA思想,將權限系統和后臺運營管理平臺解耦出來,通過API接口進行調用,減小了項目的復雜度,提高了項目的魯棒性。
本文主要是設計和實現后臺運營管理平臺的權限系統。權限系統主要分為2個部分,一個部分是權限的處理,另一個部分是權限的顯示。
Dubbo是一個分布式SOA(Service-Oriented Architecture)框架,隨著互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進[2]。
Dubbo的架構,如圖1所示。
其中,Provider是暴露服務的服務提供方、Consumer是調用遠程服務的服務消費方、Registry是服務注冊與發現的注冊中心、Monitor是統計服務的調用次調和調用時間的監控中心、Container是服務運行容器。Dubbo將項目拆分為一個一個的服務,提高了應用整體的連通性、健壯性、伸縮性、升級性。

圖1 Dubbo框架的架構
ZooKeeper是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等[3]。Dubbo框架支持多種框架作為Registry中心,譬如ZooKeeper、Redis、Simple等。我們使用最廣的,最成熟的框架ZooKeeper來作為Dubbo框架中的服務注冊與發現的注冊中心。
SSM框架是目前主流web項目開發框架,它其實是3個框架的縮寫,分別是Spring、SpringMVC、Mybatis。
Spring是一個開源框架,主要是為了降低企業應用程序開發的復雜性。Spring框架主要提供了輕量級的控制反轉(IoC)和面向切面編程(AOP),可以單獨使用,也可以和SpringMVC框架、Mybatis框架等框架整合使用。Spring可以用大家熟悉的xml文件進行配置,也可以使用注解配置,還可以同時使用xml和注解混合進行配置,給開發者帶來了極大的方便和靈活性。Spring的這些優點,給開發權限系統帶來了極大的便利。
Spring MVC是一種基于Java的實現了Web MVC設計模式的請求驅動(請求-響應模型)類型的輕量級Web框架,其使用了MVC架構模式的思想,將web層進行職責解耦,方便開發者開發企業應用程序[4]。
Mybatis是持久層框架,可以通過XML文件或者注解來配置Map接口,開發者通過Map接口就可以調用數據庫,實現SQL語句和程序代碼相分離,使系統的設計和開發更加清晰明了。權限系統的數據庫表結構比較穩定,主要操作是對數據進行增加和查詢,為了提高讀取數據庫的效率,選擇Mybatis框架作為權限系統的持久層框架是非常合適的。
后臺運營管理平臺和權限系統分屬不同的項目部署在不同的服務器上,后臺運營管理平臺作為消費者,權限系統作為生產者是通過Zookeeper作為橋梁進行交互。權限系統主要包括2部分,一部分是對用戶展現的菜單的權限,一部分是用戶對頁面操作的權限。而后臺運營管理平臺主要是通過調用權限系統來進行權限的展示和控制。
根據公司運營管理平臺的需求,目前運營管理主要有以下幾個模塊賬戶管理、金豆管理、活動管理、信使管理、MDR管理、保單導入等一級菜單,在一級菜單先下面還有很多二級菜單,而在二級菜單之下還有很多具體的三級菜單。平臺菜單結構,如表1所示。

表1 平臺菜單結構表
不同的用戶顯示頁面是根據該用戶所具有的權限顯示和加載頁面。其中一級菜單為模塊菜單,二級菜單的上級菜單為一級菜單,三級菜單的上級菜單為二級菜單,是一種樹形結構。
不同的頁面所具有的查詢權限是根據權限系統返回的信息進行限定的。權限系統返回的字段信息,如表2所示。

表2 權限返回字段及含義
根據目前的項目需求只需要這些字段,后續如果有新的需求可以后續更改,添加字段。后臺運營管理平臺在加載三級頁面時會發送一個獲取權限的請求,之后頁面上會根據請求返回的字段對頁面中搜索選項框中的選項進行限定,同時在進行查詢的時候也會把權限返回的字段添加到查詢請求的報文中。
運營管理平臺的用戶主要是各個地區和不同合作方的運營人員。每個地區或者公司的人分為一個組,每個人員在系統中扮演注冊用戶的角色,而在不同的項目組中也扮演不同的角色,例如管理員和普通用戶[5]。系統中需要控制的對象類型主要有2種,一種是數據庫的查詢,一種是頁面的顯示。權限模型與系統用戶對應的關系,如表3所示。

表3 權限模型與系統用戶對應的關系
系統中用戶權限的判斷邏輯主要分為兩部分:①系統用戶在登陸時只顯示用戶所在組所具有的展示菜單,運營管理平臺的菜單加載主要通過權限系統的返回加載對應的菜單。②每個用戶在點擊二級菜單的時候會顯示三級菜單,在加載三級菜單的時候會向權限系統發送請求,頁面上的一些選項會根據權限系統的返回加載下拉的按鈕。譬如地區的選項不同權限的用戶加載的省份是不同的。
數據庫的設計基本按照上一小結的思路來設計,符合項目的實際需求,數據庫的總體設計,如圖2所示。

圖2 數據庫表
在圖2中,smc_menu是菜單表,主要是用來存儲運營管理平臺的菜單顯示的,其中ID為每個菜單的ID編號,UPPERID為上一級菜單的編號,MENUNAME是頁面的名稱,ACTIONURL為點擊菜單之后的返回的頁面,SYSTEMCODE為公司不同系統的編碼,其他還有很多屬性就不逐一介紹了。saa_grade是分組表,主要用來記錄組別,其中有分組的ID,分組GradeCName等字段。saa_usergrade表主要是用來記錄用戶對應的分組,saa_task主要是用來對每個頁面和行為進行標記的任務表。saa_gradetask主要是記錄每個分組可以執行的任務。最右邊的5個表分別為saa_premitapp,saa_permitcompany,saa_permitenvironment,saa_permitproduct,saa_permitsystem幾個表主要對應的是搜索查詢權限的設置,分別對應搜索權限返回的appid字段、partner字段、和地區的幾個字段。
整個系統的實現不是單一的某一部分,而是運營管理平臺和權限系統結合實現的,對用戶權限的存儲和處理是權限系統的工作,而權限的控制則需要運營管理平臺的支持和實現。
對于整個系統,用戶在登陸系統的時候,會調用權限接口的方法,然后前端頁面根據權限系統返回的信息加載菜單,當用戶點擊二級菜單時,返回的三級菜單中的選擇選項會根據權限系統返回的權限限定可以選擇的選項。具體的流程,如圖3所示。

圖3 系統權限認證流程
權限系統的代碼主要分為兩部分,一部分為菜單顯示權限提供服務,另一部為搜索權限提供服務。后臺運營管理平臺主要通過在頁面發送ajax請求調用SaaPowerService和MenuService接口獲取用戶的權限,然后在通過Jsp和js文件展現給用戶。
整個系統各個組件之間是通過Dubbo框架來進行交互的,每個組件通過Dubbo暴露各自的服務,運營管理平臺通過Zookeeper發現各個服務的具體地址。各個組件的配置類似金豆模塊的Dubbo配置,如圖4所示。
運營管理平臺的權限顯示,如圖5所示。

圖4 項目Dubbo配置

圖5 后臺運營管理平臺權限顯示
本文的權限系統結合了當前主流的SOA思想,將權限系統單獨開發為一個服務,該服務整合了Spring、Spring MVC和Mybatis框架實現了權限系統的內部的業務邏輯、數據、顯示頁面的分離,使得系統的可維護性大大提高。權限系統的開發使用了DUBBO作為RPC框架,Zookeeper作為服務注冊和發現的調度中心,后臺運營管理平臺通過API接口的方式與權限系統進行交互,解耦了后臺運營管理平臺和權限系統的耦合性,提高了系統的魯棒性。