讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、武昌網(wǎng)站維護(hù)、網(wǎng)站推廣。
轉(zhuǎn)載本文需注明出處:微信公眾號(hào)EAWorld,違者必究。
引言:
應(yīng)用基礎(chǔ)框架Coframe是EOS產(chǎn)品自帶的開(kāi)源應(yīng)用基礎(chǔ)框架,提供了資源管理、權(quán)限管理、用戶以及角色管理等業(yè)務(wù)應(yīng)用基礎(chǔ)能力,用戶可以根據(jù)自己的需要進(jìn)行二次開(kāi)發(fā)與擴(kuò)展。本文向大家分享Coframe的主要功能和設(shè)計(jì)實(shí)現(xiàn)方案。
目錄:
一、簡(jiǎn)介
二、系統(tǒng)資源
三、權(quán)限管理
四、組織管理
一、簡(jiǎn)介應(yīng)用基礎(chǔ)框架也叫Coframe,是產(chǎn)品自帶的開(kāi)源應(yīng)用基礎(chǔ)框架,提供了一些基礎(chǔ)功能,用戶可以根據(jù)自己的需要進(jìn)行二次開(kāi)發(fā)與擴(kuò)展。
Coframe提供3大核心功能:
系統(tǒng)資源:提供了功能菜單管理、字典碼表、應(yīng)用管理折幾個(gè)應(yīng)用框架基礎(chǔ)能力。
權(quán)限管理:提供了基于Party(參與者) 的復(fù)雜權(quán)限計(jì)算模型和授權(quán)模型。
基于參與者、資源與授權(quán)等概念可擴(kuò)展開(kāi)發(fā)出符合用戶個(gè)性化需求的參與者模型。
組織管理:提供了機(jī)構(gòu)、崗位、員工、 用戶、工作組等組織機(jī)構(gòu)相關(guān)管理功能,支持與已有業(yè)務(wù)系統(tǒng)對(duì)接,使得基于普元EOS Platform 8.0開(kāi)發(fā)的應(yīng)用可方便地使用同一套組織機(jī)構(gòu)。
邏輯架構(gòu)
邏輯架構(gòu)圖展示了基礎(chǔ)應(yīng)用框架的基本功能模塊,前端Restful形式接口調(diào)用后端服務(wù)。
進(jìn)程架構(gòu)
Coframe集成部署示意圖
應(yīng)用基礎(chǔ)框架有兩種部署模式:微服務(wù)架構(gòu)Coframe集成模式和單應(yīng)用架構(gòu)Coframe集成模式。
單應(yīng)用架構(gòu)很好理解,即直接使用Coframe源碼或者jar包開(kāi)發(fā)應(yīng)用,后端只有一個(gè)server,而集成模式可以將應(yīng)用要對(duì)外暴露的服務(wù)封裝在Coframe中,這樣Coframe可以對(duì)應(yīng)用進(jìn)行權(quán)限管理。前端使用VUE開(kāi)發(fā),可以很方便的使用源碼進(jìn)行二次開(kāi)發(fā)。
數(shù)據(jù)模型
(可點(diǎn)擊圖片放大查看)
應(yīng)用基礎(chǔ)框架的數(shù)據(jù)模型即DB表結(jié)構(gòu),展示了主要的一些表結(jié)構(gòu),包括權(quán)限表,用戶表等。用戶可以很方便的進(jìn)行二次開(kāi)發(fā)擴(kuò)展應(yīng)用。
二、系統(tǒng)資源菜單管理
菜單框架支持兩級(jí)菜單,用戶可以自定義菜單的路徑和打開(kāi)方式等。
應(yīng)用基礎(chǔ)框架提供了幾個(gè)基礎(chǔ)的菜單,用戶可以在頁(yè)面編輯菜單或者直接在數(shù)據(jù)庫(kù)端編輯菜單。目前應(yīng)用基礎(chǔ)框架前端Ui支持二級(jí)菜單,用戶可以根據(jù)自己的需求擴(kuò)展到三級(jí)菜單。
字典碼表
字典碼表即為系統(tǒng)內(nèi)部定義的具有業(yè)務(wù)屬性的數(shù)據(jù)字典。
系統(tǒng)管理員可以配置字典類型和字典項(xiàng),用于管理系統(tǒng)中的枚舉類型的基礎(chǔ)數(shù)據(jù),并且支持excel導(dǎo)入導(dǎo)出。字典類型和字典數(shù)據(jù)均支持一級(jí)子項(xiàng)。
字典類型:對(duì)數(shù)據(jù)進(jìn)行分類管理
字典數(shù)據(jù)項(xiàng):需要管理的枚舉數(shù)據(jù)
應(yīng)用管理
應(yīng)用管理又叫服務(wù)權(quán)限控制,是指在多應(yīng)用系統(tǒng)以及單應(yīng)用系統(tǒng)下,實(shí)現(xiàn)對(duì)應(yīng)用的服務(wù)功能的權(quán)限控制。實(shí)現(xiàn)角色、用戶、功能的靈活綁定。
在需要進(jìn)行權(quán)限管理的功能接口方法定義上添加@TarestOperation注解,發(fā)布服務(wù)。
@RequestMapping("/say-hello")
@TarestService(group = "SP1", displayName = "服務(wù)提供組1", version = "1.0.0.0", groupName = "服務(wù)提供組1", name = "ISampleAppHello")
public interface ISampleAppHello {
@GetMapping
@TarestOperation(checkPermission=false,name="DEMO_001",displayName="功能1")
String sayHello();
/**
* @TarestOperation 在@TarestOperation中默認(rèn)是不進(jìn)行權(quán)限管理的
* 通過(guò)設(shè)置checkPermission = true,打開(kāi)權(quán)限控制功能
* **/
@GetMapping(value = "/user")
@TarestOperation(checkPermission =true,name="DEMO_002",displayName="功能2")
String insertDemo(@RequestParam String name, @RequestParam Integer age);
}
(左右滑動(dòng)查看全部代碼)
單應(yīng)用系統(tǒng)即只有一個(gè)后端應(yīng)用的系統(tǒng),(直接以嵌入方式集成Coframe)無(wú)需新建應(yīng)用。
多應(yīng)用系統(tǒng)即有多個(gè)后端應(yīng)用的系統(tǒng),Coframe作為一個(gè)獨(dú)立的應(yīng)用部署的系統(tǒng),需要在coframe中新建應(yīng)用。如圖所示:
三、權(quán)限管理
提供了基于Party(參與者) 的復(fù)雜權(quán)限計(jì)算模型和授權(quán)模型。
基于參與者、資源與授權(quán)等概念可擴(kuò)展開(kāi)發(fā)出符合用戶個(gè)性化需求的參與者模型。
角色:角色是Coframe一個(gè)重要的對(duì)象,也可以成為權(quán)限集,表示系統(tǒng)中權(quán)限一個(gè)子集,用于控制用戶可以使用的功能集合,賦予用戶一個(gè)角色表示給用戶一定功能的使用權(quán)限。Coframe中角色的分配本身賦予某些用戶,員工,機(jī)構(gòu)等之外,還要向角色授予可訪問(wèn)某些功能,模塊,表單,視圖等資源的權(quán)限。擁有某角色的用戶可訪問(wèn)角色被授予的資源的權(quán)限。
用戶:所有能登錄系統(tǒng)的用戶都是系統(tǒng)中的用戶,需要增加登錄賬號(hào)有兩種方式。一種是在用戶管理中新增用戶,第二種是在組織管理中新增員工時(shí)關(guān)聯(lián)一個(gè)用戶,如果用戶的登錄名不存在會(huì)創(chuàng)建一個(gè)新的用戶。
用戶管理
所有能登錄系統(tǒng)的用戶都是系統(tǒng)中的用戶,需要增加登錄賬號(hào)有兩種方式。一種是在用戶管理中新增用戶,第二種是在組織管理中新增員工時(shí)關(guān)聯(lián)一個(gè)用戶,如果用戶的登錄名不存在會(huì)創(chuàng)建一個(gè)新的用戶。當(dāng)Coframe使用IAM的統(tǒng)一認(rèn)證登錄的時(shí)候能夠同步IAM端的同一租戶下的用戶信息。
Coframe的用戶賬號(hào)由其登錄認(rèn)證方式?jīng)Q定是本地創(chuàng)建的還是又IAM即同一認(rèn)真平臺(tái)同步過(guò)來(lái)的用戶信息。
本地登錄:用戶賬號(hào)及其認(rèn)證密碼在本地存儲(chǔ),本地認(rèn)證配置可以參考:http://t.cn/EUrzEtL
單點(diǎn)登錄:即與IAM集成的sso方式登錄,可以參考:http://t.cn/EUrZPOs
授權(quán)管理
目前提供了菜單授權(quán)與服務(wù)授權(quán),授權(quán)管理即將資源與參與者之間建立關(guān)系。如下圖所示,菜單和應(yīng)用:
即可以視為資源,而賬號(hào)、角色、組織機(jī)構(gòu)、工作中等,即可以視為參與者。授權(quán)表結(jié)構(gòu)如下圖所示:
此注解用來(lái)標(biāo)志一個(gè)數(shù)據(jù)實(shí)體為授權(quán)實(shí)體,授權(quán)實(shí)體需要指定類型:資源、授權(quán)主體,比如:
@Entity
// 此實(shí)體名稱為order,類型為resource
@AuthEntity(name = "order", type = AuthEntityType.RESOURCE)
@Table(name = "SAMPLE_ORDER")
public class SampleOrder {
@Id
@GeneratedValue
private Long id;
private String name;
private Date date;
}
(左右滑動(dòng)查看全部代碼)
四、組織管理
機(jī)構(gòu)管理
機(jī)構(gòu)指企業(yè)的組織機(jī)構(gòu),一般包含機(jī)構(gòu)、崗位、員工等信息。
機(jī)構(gòu)管理通過(guò)對(duì)一棵機(jī)構(gòu)人員樹的維護(hù)把機(jī)構(gòu)、崗位、人員等信息和關(guān)系維護(hù)好,并可設(shè)置這些組織對(duì)象的角色。
工作組管理
工作組與機(jī)構(gòu)類似,是為了將項(xiàng)目組、工作組等臨時(shí)性的組織機(jī)構(gòu)管理起來(lái),業(yè)務(wù)上通常工作組有一定的時(shí)效性,是一個(gè)非常設(shè)機(jī)構(gòu)。
工作組是企業(yè)動(dòng)態(tài)創(chuàng)建的組織機(jī)構(gòu)分組,工作組下可以有子工作組、員工信息。
總結(jié):
以上介紹了應(yīng)用基礎(chǔ)框架的主要基礎(chǔ)功能,以及設(shè)計(jì)過(guò)程中的一些理念,比如授權(quán)模型等。
作為開(kāi)源應(yīng)用基礎(chǔ)框架會(huì)隨著規(guī)劃發(fā)展不斷完善,用戶可以根據(jù)自身的需求來(lái)更改適配。也非常歡迎大家能夠更多參與使其更加健壯。
精選提問(wèn):
問(wèn)1:這個(gè)是一個(gè)前后端分離的項(xiàng)目嗎 我看前端單獨(dú)部署在nginx中。
答:是前后端分離的,前端是用VUE開(kāi)發(fā)的。
問(wèn)2:接入的SSO是支持CAS嗎?如果是CAS的話,在前后端分離的項(xiàng)目在前端有什么好的設(shè)計(jì)嗎?因?yàn)镃AS一般基于fliter來(lái)接入CAS server的。
答:接入的SSO是Oauth3.0的,目前不支持CAS,可以參考。
問(wèn)3:Coframe是開(kāi)源的嗎?可以商用嗎?
答:一般對(duì)公司的客戶是開(kāi)源的,但是對(duì)外并沒(méi)有公布源碼(沒(méi)有放在github之類的托管平臺(tái)上面)。
問(wèn)4:它是一個(gè)平臺(tái)級(jí)的應(yīng)用嗎,我可以接入第三方的應(yīng)用進(jìn)來(lái)嗎?
答:不是,它提供了類似菜單、授權(quán)等基礎(chǔ)能力,可以基于源碼二次開(kāi)發(fā),也可以基于jar開(kāi)發(fā)自己的應(yīng)用。
問(wèn)5:目前最新版本是多少?授權(quán)用的是Shiro嗎?
答:最新快照版本8.0.0-SNAPSHOT,目前準(zhǔn)備開(kāi)發(fā)8.0.0-LA2-SNAPSHOT。授權(quán)不是用的shiro,是基于參與者、資源與授權(quán) 這三種模型開(kāi)發(fā)的授權(quán)方式。
關(guān)于作者:許方杰,普元資深軟件工程師,曾在華為負(fù)責(zé)項(xiàng)目核心模塊開(kāi)發(fā),運(yùn)維等,擅長(zhǎng)Web、運(yùn)維等領(lǐng)域技術(shù),參與普元 EOS 8微服務(wù)平臺(tái)應(yīng)用基礎(chǔ)框架(Coframe)的建設(shè)與實(shí)施。