diff --git a/flow-engine-example/pom.xml b/flow-engine-example/pom.xml
index 4a77d7bd..86021e40 100644
--- a/flow-engine-example/pom.xml
+++ b/flow-engine-example/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.flow
flow-engine-parent
- 0.0.10
+ 0.0.11
../pom.xml
diff --git a/flow-engine-framework/pom.xml b/flow-engine-framework/pom.xml
index 30b99f4a..acecb8a8 100644
--- a/flow-engine-framework/pom.xml
+++ b/flow-engine-framework/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.flow
flow-engine-parent
- 0.0.10
+ 0.0.11
flow-engine-framework
diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/form/permission/FormFieldPermission.java b/flow-engine-framework/src/main/java/com/codingapi/flow/form/permission/FormFieldPermission.java
index 7064ff9d..841f1c37 100644
--- a/flow-engine-framework/src/main/java/com/codingapi/flow/form/permission/FormFieldPermission.java
+++ b/flow-engine-framework/src/main/java/com/codingapi/flow/form/permission/FormFieldPermission.java
@@ -29,4 +29,8 @@ public static FormFieldPermission fromMap(Map map) {
permission.setType(PermissionType.valueOf((String) map.get("type")));
return permission;
}
+
+ public boolean isField(String formCode, String fieldCode) {
+ return this.getFormCode().equalsIgnoreCase(formCode) && this.getFieldCode().equalsIgnoreCase(fieldCode);
+ }
}
diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/service/WorkflowService.java b/flow-engine-framework/src/main/java/com/codingapi/flow/service/WorkflowService.java
index 14ce00db..ecfcc043 100644
--- a/flow-engine-framework/src/main/java/com/codingapi/flow/service/WorkflowService.java
+++ b/flow-engine-framework/src/main/java/com/codingapi/flow/service/WorkflowService.java
@@ -31,7 +31,7 @@ public class WorkflowService {
* @param currentVersion 当前版本
* @param creatable 是否创建新的版本
*/
- public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatable) {
+ public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatable,boolean enable) {
List updateList = new ArrayList<>();
currentVersion.enableVersion();
@@ -57,10 +57,14 @@ public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatabl
workflowVersionRepository.saveAll(updateList);
Workflow workflow = currentVersion.toWorkflow();
- try {
- workflow.enable();
- }catch (Exception ignore){
- workflow.disable();
+ workflow.filterPermissions();
+
+ if(enable) {
+ try {
+ workflow.enable();
+ } catch (Exception ignore) {
+ workflow.disable();
+ }
}
workflowRepository.save(workflow);
}
@@ -118,7 +122,9 @@ public void changeVersion(long versionId) {
}
}
workflowVersionRepository.saveAll(versionList);
- workflowRepository.save(currentVersion.toWorkflow());
+ Workflow workflow = currentVersion.toWorkflow();
+ workflow.filterPermissions();
+ workflowRepository.save(workflow);
}
@@ -148,9 +154,9 @@ public void delete(String workId) {
* 保存流程
* @param workflow 流程对象
*/
- public void saveWorkflow(Workflow workflow) {
+ public void saveWorkflow(Workflow workflow,boolean enable) {
WorkflowVersion workflowVersion = new WorkflowVersion(workflow);
- this.saveWorkflowVersion(workflowVersion, false);
+ this.saveWorkflowVersion(workflowVersion, false,enable);
}
/**
@@ -181,7 +187,7 @@ public String importWorkflow(String body, IFlowOperator createOperator) {
String json = Base64Utils.toJson(body);
Workflow workflow = Workflow.formJson(json);
workflow.resetWorkflow(createOperator);
- this.saveWorkflow(workflow);
+ this.saveWorkflow(workflow,false);
return workflow.getId();
}
}
diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/strategy/node/FormFieldPermissionStrategy.java b/flow-engine-framework/src/main/java/com/codingapi/flow/strategy/node/FormFieldPermissionStrategy.java
index e8a166a6..e14c6897 100644
--- a/flow-engine-framework/src/main/java/com/codingapi/flow/strategy/node/FormFieldPermissionStrategy.java
+++ b/flow-engine-framework/src/main/java/com/codingapi/flow/strategy/node/FormFieldPermissionStrategy.java
@@ -46,7 +46,7 @@ public FormFieldPermissionStrategy(List fieldPermissions) {
@Override
public void verifyNode(FlowForm form) {
Map fieldTypes = form.loadAllFieldDataTypeMaps();
- if(fieldPermissions!=null) {
+ if (fieldPermissions != null) {
for (FormFieldPermission permission : fieldPermissions) {
String key = permission.getFormCode() + "." + permission.getFieldCode();
if (!fieldTypes.containsKey(key)) {
@@ -61,9 +61,9 @@ public void verifySession(FlowSession session) {
FlowForm flowForm = session.getFormData().getFlowForm();
Map currentData = session.getCurrentRecord().getFormData();
Map latestData = session.getFormData().toMapData();
- if(fieldPermissions!=null) {
+ if (fieldPermissions != null) {
for (FormFieldPermission permission : fieldPermissions) {
- FormField formField = flowForm.getField(permission.getFormCode(),permission.getFieldCode());
+ FormField formField = flowForm.getField(permission.getFormCode(), permission.getFieldCode());
// 子表
if (flowForm.isSubForm(permission.getFormCode())) {
if (permission.getType() == PermissionType.READ) {
@@ -92,7 +92,7 @@ public void verifySession(FlowSession session) {
if (formField.isRequired() && permission.getType() == PermissionType.READ) {
Object currentValue = currentData.get(permission.getFieldCode());
Object latestValue = latestData.get(permission.getFieldCode());
- if (latestValue!=null && currentValue!=null && !currentValue.equals(latestValue)) {
+ if (latestValue != null && currentValue != null && !currentValue.equals(latestValue)) {
throw FlowValidationException.fieldReadOnly(permission.getFieldCode());
}
}
@@ -125,4 +125,56 @@ public static FormFieldPermissionStrategy defaultStrategy() {
}
+ private FormFieldPermission getFormFieldPermission(String formCode,String fieldCode){
+ if(this.fieldPermissions!=null) {
+ for (FormFieldPermission fieldPermission:this.fieldPermissions){
+ if(fieldPermission.isField(formCode,fieldCode)){
+ return fieldPermission;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void filterPermissions(FlowForm meta) {
+ Map fieldMap = meta.loadAllFieldDataTypeMaps();
+
+ if (this.fieldPermissions == null || this.getFieldPermissions().isEmpty()) {
+ // init fieldPermissions
+ this.fieldPermissions = new ArrayList<>();
+ for (String formField:fieldMap.keySet()){
+ String formCode = formField.split("\\.")[0];
+ String fieldCode = formField.split("\\.")[1];
+
+ FormFieldPermission fieldPermission = new FormFieldPermission();
+ fieldPermission.setFormCode(formCode);
+ fieldPermission.setFieldCode(fieldCode);
+ fieldPermission.setType(PermissionType.WRITE);
+
+ this.fieldPermissions.add(fieldPermission);
+ }
+
+ } else {
+ // filter fieldPermissions
+ System.out.println("filter fieldPermissions meta:" + meta);
+
+ List fieldPermissions = new ArrayList<>();
+ for (String formField:fieldMap.keySet()){
+ String formCode = formField.split("\\.")[0];
+ String fieldCode = formField.split("\\.")[1];
+
+ FormFieldPermission fieldPermission = this.getFormFieldPermission(formCode,fieldCode);
+ if(fieldPermission==null) {
+ fieldPermission = new FormFieldPermission();
+ fieldPermission.setFormCode(formCode);
+ fieldPermission.setFieldCode(fieldCode);
+ fieldPermission.setType(PermissionType.WRITE);
+ }
+ fieldPermissions.add(fieldPermission);
+ }
+
+ this.fieldPermissions = fieldPermissions;
+ }
+
+ }
}
diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/workflow/Workflow.java b/flow-engine-framework/src/main/java/com/codingapi/flow/workflow/Workflow.java
index 96128e51..23391b63 100644
--- a/flow-engine-framework/src/main/java/com/codingapi/flow/workflow/Workflow.java
+++ b/flow-engine-framework/src/main/java/com/codingapi/flow/workflow/Workflow.java
@@ -13,6 +13,7 @@
import com.codingapi.flow.node.nodes.StartNode;
import com.codingapi.flow.operator.IFlowOperator;
import com.codingapi.flow.script.node.OperatorMatchScript;
+import com.codingapi.flow.strategy.node.FormFieldPermissionStrategy;
import com.codingapi.flow.strategy.workflow.IWorkflowStrategy;
import com.codingapi.flow.strategy.workflow.InterfereStrategy;
import com.codingapi.flow.strategy.workflow.UrgeStrategy;
@@ -89,7 +90,7 @@ public class Workflow {
private boolean enable;
- public boolean isDisable(){
+ public boolean isDisable() {
return !enable;
}
@@ -212,7 +213,7 @@ public static Workflow formJson(String json) {
IFlowNode flowNode = NodeFactory.getInstance().createNode(node);
nodeList.add(flowNode);
}
- workflow.setNodes(nodeList);
+ workflow.setNodes(nodeList);
}
List