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