package jnpf.bizcommon.onlyoffice.service.impl; import cn.dev33.satoken.stp.StpUtil; import jnpf.base.UserInfo; import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeProperties; import jnpf.constant.PermissionConst; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; @Slf4j @Component @RequiredArgsConstructor public class OnlyOfficeEditPermissionEvaluator { private final OnlyOfficeProperties properties; public boolean canEdit(String bizModule, UserInfo user) { if (user != null && Boolean.TRUE.equals(user.getIsAdministrator())) { return true; } OnlyOfficeProperties.EditPermission rule = properties.getEditPermission(); OnlyOfficeProperties.ModuleMapping mapping = ObjectUtils.isEmpty(bizModule) ? null : rule.getModules().stream() .filter(item -> bizModule.equals(item.getBizModule())) .findFirst() .orElse(null); if (mapping == null || ObjectUtils.isEmpty(mapping.getModuleId())) { if (rule.isStrict()) { log.info("bizModule={} 未登记到 onlyoffice.edit-permission.modules,严格模式下降级只读", bizModule); return false; } log.warn("bizModule={} 未登记编辑权限映射,当前为宽松模式故放行编辑", bizModule); return true; } if (!StpUtil.hasPermission(mapping.getModuleId())) { return false; } return !mapping.isRequireBtnEdit() || StpUtil.hasPermission(mapping.getModuleId() + "::" + PermissionConst.BTN_EDIT); } }