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));
|
}
|
}
|