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