Flowable默認提供了一套本身的權限管理接口(IDM),可是從Flowable 6開始,IDM的組件被獨立出來,分爲幾個不一樣的模塊:flowable-idm-api, flowable-idm-engine, flowable-idm-spring 和 flowable-idm-engine-configurator。spring
官方之因此將IDM拆分出來,一個是由於IDM模塊並非核心的模塊,另外在不少使用Flowable的場景中,權限管理並不須要,或者大多使用權限的時候須要咱們使用本身的權限模塊,而不是默認的實現。api
Flowable默認提供了兩種方式能夠處理權限相關:bash
1 經過IdentityService,這個服務主要用來管理用戶和組,不能操做具體的權限。是簡單版數據結構
processEngine.getIdentityService();
複製代碼
2 經過IdmIdentityService,能夠用戶和組,同時能夠處理具體的權限(Privilege),在IdentityService之上作了加強,但二者是不一樣的接口。app
IdmEngineConfigurator idmEngineConfigurator = new IdmEngineConfigurator();
cfg.setIdmEngineConfigurator(idmEngineConfigurator);
// 會初始化processEngine,同時初始化配置在裏面的Configurator,如IdmEngineConfigurator
ProcessEngine processEngine = cfg.buildProcessEngine();
IdmIdentityService idmIdentityService = idmEngineConfigurator.getIdmEngineConfiguration().getIdmIdentityService();
複製代碼
兩個服務用到的是Flowable中相同的表:分佈式
**備註:**能夠看出來,Flowable官方提供的IDM在必定程度上也能夠進行RBAC(Role-Based Access Control)的操做,只是權限管理會複雜一點的時候,IDM就知足不了咱們的操做。ui
user -> userspa
group -> role設計
PRIV -> access controlcode
若是咱們以爲默認的權限管理知足不了咱們的須要,或者已經有本身的權限管理系統,則須要額外處理。有2種能夠與本身業務兼容的方案:
咱們在上面已經說過Flowable權限管理的幾張表的內容,按結構將咱們的權限數據導入其中便可。但考慮到數據方面內容,可能也須要必定的代碼開發量。
注意:
官方的IDM模塊以及被單獨拆分出來,咱們的實現的代碼不會對Flowable的工做量有影響,另外IDM模塊,只須要關心可否提供權限控制便可。
以LDAP爲例,在使用的時候只需使用正確的IDM配置器便可:
// 只需改動這一行的配置器便可
IdmEngineConfigurator idmEngineConfigurator = new LDAPConfigurator();
cfg.setIdmEngineConfigurator(idmEngineConfigurator);
ProcessEngine processEngine = cfg.buildProcessEngine();
IdmIdentityService idmIdentityService = idmEngineConfigurator.getIdmEngineConfiguration().getIdmIdentityService();
複製代碼
根據本身的業務須要,提供用戶的管理功能。關鍵部分:
若是咱們的已經有本身的權限管理系統,在必定程度上至關於作本身的權限管理系統的客戶端。
在業務發展一段時間後引入工做流,採用第二種方案更合適一些。