已經完成許可權管理功能
1、 模組添加 、列表查詢
2、 功能點添加 、查詢
3、 角色添加 、為角色授予許可權
4、 為使用者授予角色
---------------- 全面測試。將返回json異常修複
將bos功能許可權資訊.sql 匯入到資料庫
功能路徑,參考menu.json 、 Action中業務方法
**** <constant name="struts.devMode" value="true" /> 發生異常時,返回特定頁面 狀態代碼200 ---- 上線後 設定false
====================================================================================
一、使用攔截器,對所有action進行許可權控制
細粒度 許可權控制,添加後,需要全體功能重新測試
Filter: 攔截所有url
Interceptor 攔截所有 action訪問
Spring AOP 攔截所有Service
********** 攔截針對 Action訪問路徑(名稱)
1) 使用者未登陸情況下 : 開放登陸功能 login.jsp 、user_login.action(登陸)
2) 如果使用者已經登陸,沒有任何授權,開發 修改密碼 : page_common_index.action(首頁)、user_editpassword.action(修改密碼)
3) 所用功能 其它.action 無許可權不能訪問
4) 超級管理員 admin 密碼 admin ----- 開發所用功能
先判斷 對方訪問是不是登陸 ---- 如果是 允許存取
再判斷 使用者是否登陸 ------ 如果沒有登陸 (去登陸)
然後判斷 使用者是不是管理員admin ----- 如果是允許存取
再判斷 使用者訪問功能是不是 修改密碼或者首頁 ----- 如果是 允許存取
最後判斷 訪問功能,是否與當前登陸使用者權限一致 ---- 如果不一致( 許可權不足) , 如果一致允許存取
<interceptors>
<!-- 註冊攔截器 -->
<interceptor name="privilegeInterceptor" class="cn.itcast.bos.web.interceptor.PrivilegeInterceptor"></interceptor>
<!-- 自訂攔截器棧 -->
<interceptor-stack name="privilegeStack">
<!-- 引入預設棧 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 引入許可權攔截 -->
<interceptor-ref name="privilegeInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 所有Action 都使用自訂棧 -->
<default-interceptor-ref name="privilegeStack"/>
*** 如果Action自己引入攔截器,預設棧將失效
如果在使用者登陸後,將使用者可以訪問路徑資訊,放入Session
做法一: 在業務層添加一個方法 ,返回 List<String> findFunctionsByUser(User user); 查詢使用者可以訪問功能路徑
做法二: 在Domain User中 List<String> functions , 在登陸查詢時,就將List封裝進去 ,一起儲存到Session
// 如果查詢到了,將相關功能路徑 封裝到user中 functionPaths
Role role = user.getRole();
if(role != null){
// 使用者已經有角色
for(Function function: role.getFunctions()){
user.getFunctionPaths().add(function.getPage());// 將功能路徑 儲存user的列表中
}
}
插入管理員
insert into users(username,password) values('admin',md5('admin'));
====================================================================================
二、JBPM 工作流程 在項目中應用
JBPM 學習 = 商務程序圖 + API
因為業務不同 流程一定不同 (jbpm 商務程序圖,和uml 活動圖表非常類似)
* 商務程序圖中有很多活動節點 start end state task decision fork/join (最重要 任務節點)
API : ProcessEngine 、RepositoryService 、ExecutionService 、TaskService
嵌入到項目中 : JBPM工作流程 流程 和 商務程序 結合到一起
* 操作商務程序時。操作業務表, 同時JBPM 工作流程表
***** 不管流程如何複雜,工作流程都可以很好的管理 (隨時查看整個流程,查看當前操作 進行流程哪個環節上)
常見做法: 手動方式(圖形設計器) ---- xml流程定義檔案 ------ 發布到工作流程架構中 --- 通過業務模組啟動這個流程
***** 定製工作流程
管理系統,在系統中管理員可以添加開始節點、任務節點、結束節點 通過form進行輸入 ---- 產生工作流程 xml
三、設計中轉jbpm流程。部署到項目中
通過jbpm設計器 完成流程圖 四個task任務節點, 一個decision判斷節點
為每個任務節點指定任務的負責人 (三種個人任務指定、三種組任務指定)
1、任務由一組人來完成,而不是個人任務 (使用組任務的設定)
2、如果確定負責人 candidate-users 屬性固定 ------- 實際開發中 負責人不確定 (動態指定負責人) Handler
*** 自訂一個Handler 指定組負責人
*** 自訂一個Handler : RoleAssignmentHandler , 同一個handler 為不同四個任務指定責任人
3、Decision判斷也要指定handler : ArriveDecisionHandler
* 根據變數isArrive 判斷是去 中轉 還是 去入庫
在測試環境通過
四、部署中轉jbpm流程 (管理流程) ----------- admin
流程列表查詢 : 查看已經上傳所有流程
上傳流程zip壓縮檔 : 上傳後,將流程deploy
查看流程圖
刪除流程定義 (在測試時可以用。當流程正式啟用後 )
processdefinition_list.jsp 列表
processdefinition_deploy.jsp 上傳發布
admin.json 添加菜單 指向流程列表
查詢整個流程定義資訊 RepositoryService 提供createProcessDefinitionQuery()
*** java.util.List<ProcessDefinition> list() 結果 List<ProcessDefinition>
將admin.json菜單 直接執行查詢Action ,直接查詢顯示商務程序列表
查看流程圖
String deploymentId = "90001"; // 發布id
String resourceName = "test.png"; // 與商務程序名相同png
InputStream in = processEngine.getRepositoryService()
.getResourceAsStream(deploymentId, resourceName);