色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

使用JBoss jBPM實(shí)現(xiàn)流程訪問(wèn)和執(zhí)行的授權(quán)

  當(dāng)今常見(jiàn)的BPM趨勢(shì)是集中化整個(gè)公司或公司內(nèi)大部門(mén)的BPM執(zhí)行。這意味著,單個(gè)BPM服務(wù)器(集群)運(yùn)行著整個(gè)公司的許多流程定義。這種方式的挑戰(zhàn)在于,雖然BPM引擎(包括jBPM)提供了對(duì)于任務(wù)訪問(wèn)的授權(quán)[1],但它們一般都不支持這些功能的授權(quán):流程定義的查看和刪除,流程實(shí)例的啟動(dòng)、結(jié)束、查看和刪除等。在這篇文章中,我們將描述如何對(duì)jBPM引擎進(jìn)行擴(kuò)展(基于jBPM 4.3)來(lái)實(shí)現(xiàn)這一功能。

  整體實(shí)現(xiàn)方法

  整個(gè)實(shí)現(xiàn)方式相當(dāng)直接了當(dāng)——對(duì)于每個(gè)流程定義引入一組可以授權(quán)的用戶/用戶組(類(lèi)似任務(wù)定義),作用于定義、實(shí)例和給定流程的歷史。此外,我們還想對(duì)給定的用戶/用戶組支持多重授權(quán)級(jí)別——目前我們打算引入2個(gè)角色:“starter”和“user”。這里的“starter”是允許對(duì)流程定義/實(shí)例/歷史進(jìn)行任何操作的角色,而“user”角色的權(quán)限僅限于查詢流程/歷史。

  這種方式的實(shí)現(xiàn)需要對(duì)jBPM進(jìn)行以下改造:

  • 流程定義
    • 給流程定義增加流程訪問(wèn)權(quán)限
  • 流程部署
    • 擴(kuò)展當(dāng)前的流程部署器,增加流程授權(quán)定義的解析和流程訪問(wèn)列表的生成
    • 引入額外的類(lèi)/數(shù)據(jù)庫(kù)表,存放每個(gè)流程定義的訪問(wèn)權(quán)限
  • 流程執(zhí)行(Execution)
    • 引入已授權(quán)命令(authorized command)——要求用戶經(jīng)過(guò)授權(quán)才能執(zhí)行的命令
    • 修改現(xiàn)有的jBPM中我們期望基于當(dāng)前用戶證書(shū)進(jìn)行授權(quán)的部分。這包括啟動(dòng)、結(jié)束和刪除流程實(shí)例,以及刪除部署定義。
    • 修改現(xiàn)有的jBPM查詢,考慮現(xiàn)有用戶的證書(shū)。這包括部署和流程定義查詢、流程實(shí)例查詢,以及歷史流程實(shí)例、活動(dòng)和細(xì)節(jié)的查詢。

  除了以上更改,我們還想擴(kuò)展流程實(shí)例查詢,好讓用戶可以通過(guò)指定某些流程變量的值來(lái)縮小查詢結(jié)果。這種搜索的一個(gè)常見(jiàn)情況就是查詢“由我啟動(dòng)的”流程。為了確保這種查詢總是可用,我們更改了啟動(dòng)流程實(shí)例命令的實(shí)現(xiàn),顯式地把當(dāng)前用戶ID加到了流程變量值的集合中。

  最后,為了支持多種用戶認(rèn)證方法,我們實(shí)現(xiàn)了一個(gè)自定義的身份會(huì)話,它支持用程序來(lái)設(shè)置和訪問(wèn)當(dāng)前用戶的證書(shū)。其目的在于,把用戶證書(shū)(ID和參與的組)的獲得和jBPM運(yùn)行時(shí)對(duì)這種信息的使用分離開(kāi)來(lái)。

我們的實(shí)現(xiàn)利用了非常強(qiáng)大和靈活的jBPM 4的配置機(jī)制,它讓我們可以:

  • 通過(guò)擴(kuò)展現(xiàn)有jBPM類(lèi),最小化了自定義代碼的數(shù)量,只實(shí)現(xiàn)我們擴(kuò)展所需的額外功能
  • 將我們的擴(kuò)展實(shí)現(xiàn)成可以與jBPM 4類(lèi)庫(kù)一起使用的單獨(dú)jar包,無(wú)需對(duì)現(xiàn)有庫(kù)進(jìn)行任何改變。

  在深入我們的實(shí)現(xiàn)細(xì)節(jié)之前,我們首先要討論一下我們大量使用的jBPM 4的配置。

  jBPM 4的配置機(jī)制

  jBPM的基礎(chǔ)是流程虛擬機(jī)(PVM),它建立在自定義的依賴注入實(shí)現(xiàn)之上。依賴注入由非常強(qiáng)大的、基于XML的配置機(jī)制控制,這種機(jī)制用于創(chuàng)建標(biāo)簽和預(yù)定義接口相關(guān)的特定實(shí)現(xiàn)之間的綁定(binding)。

這種機(jī)制的核心是jbpm.wire.bindings.xml文件,它描述了jBPM PVM的主要組件,包括:

  • 基本類(lèi)型
  • 對(duì)象及引用
  • 環(huán)境引用
  • Hibernate綁定
  • 會(huì)話
  • 服務(wù)
  • 部署器
  • 攔截器

  該文件是jBPM分發(fā)包的一部分。如果用戶想增加自己的綁定(binding),他可以創(chuàng)建jbpm.user.wire.bindings.xml描述它們,而不用修改jbpm.wire.bindings.xml文件。

  這兩個(gè)文件會(huì)被jBPM PVM在啟動(dòng)時(shí)讀入并解析,為定義在jbpm.cfg.xml中的基礎(chǔ)PVM執(zhí)行(execution)配置而服務(wù)。jbpm.cfg.xml一般會(huì)包含多個(gè)部分,描述了PVM執(zhí)行的特定組件的配置。

  jBPM PVM由一組提供PVM功能的服務(wù)組成,主要的PVM服務(wù)包括:

  • 倉(cāng)儲(chǔ)服務(wù),提供一組查看和管理部署倉(cāng)儲(chǔ)的方法
  • 執(zhí)行服務(wù),提供一組查看和管理運(yùn)行中流程執(zhí)行(execution)的方法。
  • 管理服務(wù),提供一組查看和管理工作(job)的方法
  • 任務(wù)服務(wù),提供一組查看和管理用戶任務(wù)(task)的方法。
  • 歷史服務(wù),提供一組訪問(wèn)運(yùn)行中和已完成流程執(zhí)行的歷史信息的方法。

  這組可用服務(wù)和實(shí)現(xiàn)這些服務(wù)的類(lèi)(使用前面說(shuō)的綁定)被配置成流程引擎的上下文。

  服務(wù)執(zhí)行被實(shí)現(xiàn)成一組命令(command),它們作為服務(wù)方法執(zhí)行的一部分被調(diào)用。命令的實(shí)際執(zhí)行由命令服務(wù)控制。

命令服務(wù)在命令服務(wù)上下文中被配置成一組攔截器,實(shí)現(xiàn)橫切關(guān)注點(diǎn),環(huán)繞(around)命令調(diào)用(命令執(zhí)行管線)。缺省的jBPM分發(fā)包在命令執(zhí)行管線中攜帶了以下攔截器:

  • 重試(Retry)攔截器負(fù)責(zé)重試命令執(zhí)行
  • 環(huán)境(Environment)攔截器負(fù)責(zé)在必要時(shí)把jBPM上下文注入命令執(zhí)行中
  • 事務(wù)(Transaction)攔截器負(fù)責(zé)介入命令調(diào)用的事務(wù)邊界劃分。

  攔截器是將jBPM移植到不同環(huán)境以及引入其他橫切關(guān)注點(diǎn)的核心機(jī)制。

  命令執(zhí)行一般會(huì)利用環(huán)境,它也是可配置的。典型的環(huán)境組件有:

  • 倉(cāng)儲(chǔ)會(huì)話
  • DB會(huì)話
  • 消息會(huì)話
  • 定時(shí)器會(huì)話
  • 歷史會(huì)話
  • 郵件會(huì)話

  可以添加其他會(huì)話來(lái)擴(kuò)展PVM的功能。

  最后,部署管理器配置允許指定一組部署器,它們依次執(zhí)行,把業(yè)務(wù)流程部署到PVM。這種方法使得擴(kuò)展流程定義可以通過(guò)實(shí)現(xiàn)額外的部署步驟完成,無(wú)需覆蓋 jBPM分發(fā)包自帶的部署器。

整個(gè)PVM的架構(gòu)圖1示:

圖 1 PVM架構(gòu)

  在流程定義中引入授權(quán)

  我們?cè)趫D2中看到,可以給流程定義添加任意屬性。利用這種擴(kuò)展選項(xiàng),我們現(xiàn)在定義以下流程屬性,描述授權(quán)策略:

  • starter-users,具有“starter”角色的用戶列表
  • starter-groups,具有“starter”角色的組列表
  • user-users,具有“user”角色的用戶列表
  • user-groups,具有“user”角色的組列表

  每個(gè)屬性的值是逗號(hào)分隔的組/用戶id列表。

圖 2 流程定義模式

  此外,我們還定義了一個(gè)特殊的用戶類(lèi)型——“any”和兩個(gè)用戶組——“all”和“admin”。任何用戶,不論其真實(shí)ID是什么,都是“any”用戶。任何組,不論其ID是什么,也都是“all”。最后,“admin”組的成員被認(rèn)為是任意組的成員。

流程授權(quán)定義由以下規(guī)則驅(qū)動(dòng):

  • 如果user-users和user-groups都未被指定,則user-users=”all”
  • 如果 starter-users和starte-groups都未被指定,則流程用戶被額外地分配“starter”角色。

  按照這個(gè)規(guī)則,清單1中的流程可以被任何人啟動(dòng)和使用。

<process package="com.navteq.jbpm" 	    key="NO_AUTHORIZATION" 	    name="Test Authorization not required"   version="1" 	    xmlns="http://jbpm.org/4.0/jpdl">	<start g="68,14,48,48" name="start"  >	<transition to="end"/></start><end g="78,383,48,48" name="end"/></process>

it知識(shí)庫(kù)使用JBoss jBPM實(shí)現(xiàn)流程訪問(wèn)和執(zhí)行的授權(quán),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 龙南县| 六枝特区| 托克托县| 封丘县| 孝义市| 麟游县| 祁东县| 陇川县| 绵竹市| 建水县| 瓦房店市| 高邮市| 东辽县| 通州市| 绥棱县| 固镇县| 游戏| 武胜县| 崇州市| 正镶白旗| 宾阳县| 广宁县| 佛冈县| 淮安市| 扶绥县| 泾阳县| 博野县| 米林县| 二手房| 沁水县| 葫芦岛市| 平阳县| 龙泉市| 南城县| 资兴市| 辽阳县| 宜君县| 莱芜市| 北京市| 九龙县| 穆棱市|