Skip to content

Commit 3bef62b

Browse files
authored
Merge pull request #110 from codingapi/dev
Dev
2 parents de05928 + d26b85b commit 3bef62b

13 files changed

Lines changed: 106 additions & 31 deletions

File tree

flow-engine-example/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.10</version>
9+
<version>0.0.11</version>
1010
<relativePath>../pom.xml</relativePath>
1111
</parent>
1212

flow-engine-framework/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.10</version>
9+
<version>0.0.11</version>
1010
</parent>
1111

1212
<name>flow-engine-framework</name>

flow-engine-framework/src/main/java/com/codingapi/flow/form/permission/FormFieldPermission.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,8 @@ public static FormFieldPermission fromMap(Map<String, Object> map) {
2929
permission.setType(PermissionType.valueOf((String) map.get("type")));
3030
return permission;
3131
}
32+
33+
public boolean isField(String formCode, String fieldCode) {
34+
return this.getFormCode().equalsIgnoreCase(formCode) && this.getFieldCode().equalsIgnoreCase(fieldCode);
35+
}
3236
}

flow-engine-framework/src/main/java/com/codingapi/flow/service/WorkflowService.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class WorkflowService {
3131
* @param currentVersion 当前版本
3232
* @param creatable 是否创建新的版本
3333
*/
34-
public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatable) {
34+
public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatable,boolean enable) {
3535
List<WorkflowVersion> updateList = new ArrayList<>();
3636

3737
currentVersion.enableVersion();
@@ -57,10 +57,14 @@ public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatabl
5757

5858
workflowVersionRepository.saveAll(updateList);
5959
Workflow workflow = currentVersion.toWorkflow();
60-
try {
61-
workflow.enable();
62-
}catch (Exception ignore){
63-
workflow.disable();
60+
workflow.filterPermissions();
61+
62+
if(enable) {
63+
try {
64+
workflow.enable();
65+
} catch (Exception ignore) {
66+
workflow.disable();
67+
}
6468
}
6569
workflowRepository.save(workflow);
6670
}
@@ -118,7 +122,9 @@ public void changeVersion(long versionId) {
118122
}
119123
}
120124
workflowVersionRepository.saveAll(versionList);
121-
workflowRepository.save(currentVersion.toWorkflow());
125+
Workflow workflow = currentVersion.toWorkflow();
126+
workflow.filterPermissions();
127+
workflowRepository.save(workflow);
122128

123129
}
124130

@@ -148,9 +154,9 @@ public void delete(String workId) {
148154
* 保存流程
149155
* @param workflow 流程对象
150156
*/
151-
public void saveWorkflow(Workflow workflow) {
157+
public void saveWorkflow(Workflow workflow,boolean enable) {
152158
WorkflowVersion workflowVersion = new WorkflowVersion(workflow);
153-
this.saveWorkflowVersion(workflowVersion, false);
159+
this.saveWorkflowVersion(workflowVersion, false,enable);
154160
}
155161

156162
/**
@@ -181,7 +187,7 @@ public String importWorkflow(String body, IFlowOperator createOperator) {
181187
String json = Base64Utils.toJson(body);
182188
Workflow workflow = Workflow.formJson(json);
183189
workflow.resetWorkflow(createOperator);
184-
this.saveWorkflow(workflow);
190+
this.saveWorkflow(workflow,false);
185191
return workflow.getId();
186192
}
187193
}

flow-engine-framework/src/main/java/com/codingapi/flow/strategy/node/FormFieldPermissionStrategy.java

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public FormFieldPermissionStrategy(List<FormFieldPermission> fieldPermissions) {
4646
@Override
4747
public void verifyNode(FlowForm form) {
4848
Map<String, DataType> fieldTypes = form.loadAllFieldDataTypeMaps();
49-
if(fieldPermissions!=null) {
49+
if (fieldPermissions != null) {
5050
for (FormFieldPermission permission : fieldPermissions) {
5151
String key = permission.getFormCode() + "." + permission.getFieldCode();
5252
if (!fieldTypes.containsKey(key)) {
@@ -61,9 +61,9 @@ public void verifySession(FlowSession session) {
6161
FlowForm flowForm = session.getFormData().getFlowForm();
6262
Map<String, Object> currentData = session.getCurrentRecord().getFormData();
6363
Map<String, Object> latestData = session.getFormData().toMapData();
64-
if(fieldPermissions!=null) {
64+
if (fieldPermissions != null) {
6565
for (FormFieldPermission permission : fieldPermissions) {
66-
FormField formField = flowForm.getField(permission.getFormCode(),permission.getFieldCode());
66+
FormField formField = flowForm.getField(permission.getFormCode(), permission.getFieldCode());
6767
// 子表
6868
if (flowForm.isSubForm(permission.getFormCode())) {
6969
if (permission.getType() == PermissionType.READ) {
@@ -92,7 +92,7 @@ public void verifySession(FlowSession session) {
9292
if (formField.isRequired() && permission.getType() == PermissionType.READ) {
9393
Object currentValue = currentData.get(permission.getFieldCode());
9494
Object latestValue = latestData.get(permission.getFieldCode());
95-
if (latestValue!=null && currentValue!=null && !currentValue.equals(latestValue)) {
95+
if (latestValue != null && currentValue != null && !currentValue.equals(latestValue)) {
9696
throw FlowValidationException.fieldReadOnly(permission.getFieldCode());
9797
}
9898
}
@@ -125,4 +125,56 @@ public static FormFieldPermissionStrategy defaultStrategy() {
125125
}
126126

127127

128+
private FormFieldPermission getFormFieldPermission(String formCode,String fieldCode){
129+
if(this.fieldPermissions!=null) {
130+
for (FormFieldPermission fieldPermission:this.fieldPermissions){
131+
if(fieldPermission.isField(formCode,fieldCode)){
132+
return fieldPermission;
133+
}
134+
}
135+
}
136+
return null;
137+
}
138+
139+
public void filterPermissions(FlowForm meta) {
140+
Map<String,DataType> fieldMap = meta.loadAllFieldDataTypeMaps();
141+
142+
if (this.fieldPermissions == null || this.getFieldPermissions().isEmpty()) {
143+
// init fieldPermissions
144+
this.fieldPermissions = new ArrayList<>();
145+
for (String formField:fieldMap.keySet()){
146+
String formCode = formField.split("\\.")[0];
147+
String fieldCode = formField.split("\\.")[1];
148+
149+
FormFieldPermission fieldPermission = new FormFieldPermission();
150+
fieldPermission.setFormCode(formCode);
151+
fieldPermission.setFieldCode(fieldCode);
152+
fieldPermission.setType(PermissionType.WRITE);
153+
154+
this.fieldPermissions.add(fieldPermission);
155+
}
156+
157+
} else {
158+
// filter fieldPermissions
159+
System.out.println("filter fieldPermissions meta:" + meta);
160+
161+
List<FormFieldPermission> fieldPermissions = new ArrayList<>();
162+
for (String formField:fieldMap.keySet()){
163+
String formCode = formField.split("\\.")[0];
164+
String fieldCode = formField.split("\\.")[1];
165+
166+
FormFieldPermission fieldPermission = this.getFormFieldPermission(formCode,fieldCode);
167+
if(fieldPermission==null) {
168+
fieldPermission = new FormFieldPermission();
169+
fieldPermission.setFormCode(formCode);
170+
fieldPermission.setFieldCode(fieldCode);
171+
fieldPermission.setType(PermissionType.WRITE);
172+
}
173+
fieldPermissions.add(fieldPermission);
174+
}
175+
176+
this.fieldPermissions = fieldPermissions;
177+
}
178+
179+
}
128180
}

flow-engine-framework/src/main/java/com/codingapi/flow/workflow/Workflow.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.codingapi.flow.node.nodes.StartNode;
1414
import com.codingapi.flow.operator.IFlowOperator;
1515
import com.codingapi.flow.script.node.OperatorMatchScript;
16+
import com.codingapi.flow.strategy.node.FormFieldPermissionStrategy;
1617
import com.codingapi.flow.strategy.workflow.IWorkflowStrategy;
1718
import com.codingapi.flow.strategy.workflow.InterfereStrategy;
1819
import com.codingapi.flow.strategy.workflow.UrgeStrategy;
@@ -89,7 +90,7 @@ public class Workflow {
8990
private boolean enable;
9091

9192

92-
public boolean isDisable(){
93+
public boolean isDisable() {
9394
return !enable;
9495
}
9596

@@ -212,7 +213,7 @@ public static Workflow formJson(String json) {
212213
IFlowNode flowNode = NodeFactory.getInstance().createNode(node);
213214
nodeList.add(flowNode);
214215
}
215-
workflow.setNodes(nodeList);
216+
workflow.setNodes(nodeList);
216217
}
217218

218219
List<Map<String, Object>> strategies = (List<Map<String, Object>>) data.get("strategies");
@@ -255,7 +256,7 @@ public void verify() {
255256
/**
256257
* 启动流程
257258
*/
258-
public void enable(){
259+
public void enable() {
259260
this.verify();
260261
this.enable = true;
261262
this.updateTime();
@@ -265,7 +266,7 @@ public void enable(){
265266
/**
266267
* 禁用流程
267268
*/
268-
public void disable(){
269+
public void disable() {
269270
this.enable = false;
270271
this.updateTime();
271272
}
@@ -291,7 +292,7 @@ private void verifyFields() {
291292
throw FlowValidationException.workflowRequired("createdOperator");
292293
}
293294
if (nodes == null || nodes.isEmpty()) {
294-
throw FlowValidationException.workflowRequired( "nodes");
295+
throw FlowValidationException.workflowRequired("nodes");
295296
}
296297
}
297298

@@ -317,9 +318,9 @@ private void verifyNodes() {
317318
}
318319
}
319320
if (start != 1 || end != 1) {
320-
if(start!=1) {
321+
if (start != 1) {
321322
throw FlowValidationException.nodeRequired("startNode");
322-
}else {
323+
} else {
323324
throw FlowValidationException.nodeRequired("endNode");
324325
}
325326
}
@@ -381,4 +382,16 @@ public void resetWorkflow(IFlowOperator createdOperator) {
381382
this.createdOperator = createdOperator;
382383
this.updateTime();
383384
}
385+
386+
public void filterPermissions() {
387+
FlowForm meta = this.form;
388+
389+
for (IFlowNode node : this.nodes) {
390+
FormFieldPermissionStrategy formFieldPermissionStrategy = node.strategyManager().getStrategy(FormFieldPermissionStrategy.class);
391+
if (formFieldPermissionStrategy != null) {
392+
formFieldPermissionStrategy.filterPermissions(meta);
393+
}
394+
}
395+
396+
}
384397
}

flow-engine-starter-api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.10</version>
9+
<version>0.0.11</version>
1010
</parent>
1111

1212
<name>flow-engine-starter-api</name>

flow-engine-starter-api/src/main/java/com/codingapi/flow/api/controller/WorkflowController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public Response changeState(@RequestBody IdRequest request) {
8787
} else {
8888
workflow.disable();
8989
}
90-
workflowService.saveWorkflow(workflow);
90+
workflowService.saveWorkflow(workflow,false);
9191
return Response.buildSuccess();
9292
}
9393

@@ -163,9 +163,9 @@ public Response save(@RequestBody JSONObject request) {
163163
if (StringUtils.hasText(versionName)) {
164164
WorkflowVersion workflowVersion = new WorkflowVersion(workflow);
165165
workflowVersion.setVersionName(versionName);
166-
workflowService.saveWorkflowVersion(workflowVersion, true);
166+
workflowService.saveWorkflowVersion(workflowVersion, true,true);
167167
} else {
168-
workflowService.saveWorkflow(workflow);
168+
workflowService.saveWorkflow(workflow,true);
169169
}
170170
return Response.buildSuccess();
171171
}

flow-engine-starter-infra/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.10</version>
9+
<version>0.0.11</version>
1010
</parent>
1111

1212
<name>flow-engine-starter-infra</name>

flow-engine-starter-query/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>com.codingapi.flow</groupId>
88
<artifactId>flow-engine-parent</artifactId>
9-
<version>0.0.10</version>
9+
<version>0.0.11</version>
1010
</parent>
1111

1212
<name>flow-engine-starter-query</name>

0 commit comments

Comments
 (0)