package jnpf.elnService.template.impl;
|
|
import jnpf.elnService.template.ElnTemplateAnnotationAccessService;
|
import jnpf.elnService.template.ElnTemplateEditabilityService;
|
import jnpf.permission.AuthorizeApi;
|
import jnpf.permission.model.authorize.UserPermissionProbe;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.StringUtils;
|
|
@Service
|
public class ElnTemplateAnnotationAccessServiceImpl implements ElnTemplateAnnotationAccessService {
|
|
private static final String SYSTEM_CODE = "LIMS";
|
private static final String MODULE_CODE = "dianziJiluMubanGuanli";
|
private static final String MODULE_CATEGORY = "Web";
|
|
private final TemplateEditability templateEditability;
|
private final PermissionProbe permissionProbe;
|
|
@Autowired
|
public ElnTemplateAnnotationAccessServiceImpl(ElnTemplateEditabilityService editabilityService,
|
AuthorizeApi authorizeApi) {
|
this(editabilityService::isEditable, authorizeApi::probeUserPermission);
|
}
|
|
ElnTemplateAnnotationAccessServiceImpl(TemplateEditability templateEditability,
|
PermissionProbe permissionProbe) {
|
this.templateEditability = templateEditability;
|
this.permissionProbe = permissionProbe;
|
}
|
|
@Override
|
public boolean canAnnotate(String tenantId, String userId, String templateId, String fileId) {
|
if (!StringUtils.hasText(tenantId) || !StringUtils.hasText(userId)
|
|| !StringUtils.hasText(templateId) || !StringUtils.hasText(fileId)) {
|
return false;
|
}
|
try {
|
if (!templateEditability.isEditable(tenantId, templateId, fileId)) {
|
return false;
|
}
|
UserPermissionProbe probe = new UserPermissionProbe();
|
probe.setTenantId(tenantId);
|
probe.setUserId(userId);
|
probe.setSystemCode(SYSTEM_CODE);
|
probe.setModuleCode(MODULE_CODE);
|
probe.setModuleCategory(MODULE_CATEGORY);
|
probe.setButtonCode("");
|
UserPermissionProbe.Result result = permissionProbe.probe(probe);
|
return result != null && result.isAllowed();
|
} catch (RuntimeException ignored) {
|
return false;
|
}
|
}
|
|
@FunctionalInterface
|
interface TemplateEditability {
|
boolean isEditable(String tenantId, String templateId, String fileId);
|
}
|
|
@FunctionalInterface
|
interface PermissionProbe {
|
UserPermissionProbe.Result probe(UserPermissionProbe probe);
|
}
|
}
|