刘光辉
5 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package jnpf.flowable.model.filepermission;
 
import lombok.Data;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
 
/** 独立于所查看历史节点的文件权限;不包含规则、参与人或附件下载地址。 */
@Data
public class FilePermissionView {
    private boolean enabled = true;
    private String taskId;
    private String formId;
    private String status = "error";
    private String revision;
    private String reason;
    private Map<String, FieldAccess> fields = new LinkedHashMap<>();
 
    @Data
    public static class FieldAccess {
        private String status = "error";
        /** 仅显式配置审阅的流程附件显示批注;不授予任何写权限。 */
        private boolean reviewEnabled;
        private Map<FilePermissionPolicy.Action, Boolean> actions = Collections.emptyMap();
    }
 
    public static FilePermissionView unavailable(String taskId, String formId, String reason) {
        FilePermissionView view = new FilePermissionView();
        view.setTaskId(taskId);
        view.setFormId(formId);
        view.setReason(reason);
        return view;
    }
 
    public static FilePermissionView legacy(String taskId, String formId) {
        FilePermissionView view = unavailable(taskId, formId, null);
        view.setEnabled(false);
        view.setStatus("ready");
        return view;
    }
 
    /** 响应缺失、错误、字段缺失均不能解释为原权限。调用前还须真实资源归属校验。 */
    public boolean allows(String field, FilePermissionPolicy.Action action) {
        if (!enabled) return "ready".equals(status);
        FieldAccess access = fields == null ? null : fields.get(field);
        return "ready".equals(status) && revision != null && !revision.isEmpty()
                && access != null && "ready".equals(access.getStatus()) && access.getActions() != null
                && Boolean.TRUE.equals(access.getActions().get(action));
    }
}