Browse Source

refactor(permission): 将按钮权限检查器和相关服务迁移至公共模块

- 移除 tenant-admin 模块中的 FormButtonPermissionCheckerImpl 实现类
- 新增 common-online 模块中的 FormButtonPermissionCheckerImpl 实现类
- 将 IRoleFormButtonService 接口从 tenant 模块迁移至 common-online 模块
- 将 RoleFormButton 实体模型从 tenant 模块迁移至 common-online 模块
- 将 RoleFormButtonController 控制器从 tenant 模块迁移至 common-online 模块
- 将 RoleFormButtonDto 数据传输对象从 tenant 模块迁移至 common-online 模块
- 迁移 RoleFormButtonMapper 数据访问层及相关 XML 映射文件
- 更新权限检查逻辑以使用 TokenData 中的角色ID信息
feature/form-permission-control
chenchuchuan 2 weeks ago
parent
commit
1bae360e2a
  1. 5
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/SysRoleController.java
  2. 3
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/service/impl/SysRoleServiceImpl.java
  3. 10
      common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java
  4. 4
      common/common-online/src/main/java/apelet/common/online/dao/RoleFormButtonMapper.java
  5. 4
      common/common-online/src/main/java/apelet/common/online/dao/mapper/RoleFormButtonMapper.xml
  6. 2
      common/common-online/src/main/java/apelet/common/online/dto/RoleFormButtonDto.java
  7. 4
      common/common-online/src/main/java/apelet/common/online/model/RoleFormButton.java
  8. 6
      common/common-online/src/main/java/apelet/common/online/service/IRoleFormButtonService.java
  9. 39
      common/common-online/src/main/java/apelet/common/online/service/impl/FormButtonPermissionCheckerImpl.java
  10. 12
      common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java
  11. 2
      common/common-online/src/main/java/apelet/common/online/util/WidgetJsonButtonParser.java
  12. 4
      common/common-online/src/main/java/apelet/common/online/vo/RoleFormButtonVo.java

5
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/SysRoleController.java

@ -9,8 +9,8 @@ import apelet.common.core.util.MyPageUtil; @@ -9,8 +9,8 @@ import apelet.common.core.util.MyPageUtil;
import apelet.common.core.validator.UpdateGroup;
import apelet.common.log.annotation.OperationLog;
import apelet.common.log.model.constant.SysOperationLogType;
import apelet.tenantadmin.tenant.dto.RoleFormButtonDto;
import apelet.tenantadmin.tenant.service.IRoleFormButtonService;
import apelet.common.online.dto.RoleFormButtonDto;
import apelet.common.online.service.IRoleFormButtonService;
import apelet.tenantadmin.upms.dto.SysRoleDto;
import apelet.tenantadmin.upms.dto.SysUserDto;
import apelet.tenantadmin.upms.model.SysRole;
@ -21,7 +21,6 @@ import apelet.tenantadmin.upms.service.SysUserService; @@ -21,7 +21,6 @@ import apelet.tenantadmin.upms.service.SysUserService;
import apelet.tenantadmin.upms.vo.SysDeptVo;
import apelet.tenantadmin.upms.vo.SysRoleVo;
import apelet.tenantadmin.upms.vo.SysUserVo;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;

3
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/service/impl/SysRoleServiceImpl.java

@ -13,6 +13,7 @@ import apelet.common.core.util.MyPageUtil; @@ -13,6 +13,7 @@ import apelet.common.core.util.MyPageUtil;
import apelet.common.ext.base.BizWidgetDatasource;
import apelet.common.ext.constant.BizWidgetDatasourceType;
import apelet.common.ext.util.BizWidgetDatasourceExtHelper;
import apelet.common.online.service.IRoleFormButtonService;
import apelet.common.sequence.wrapper.IdGeneratorWrapper;
import apelet.tenantadmin.config.DataSourceType;
import apelet.tenantadmin.upms.dao.SysDeptMapper;
@ -71,7 +72,7 @@ public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements Sy @@ -71,7 +72,7 @@ public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements Sy
@Autowired
private BizWidgetDatasourceExtHelper bizWidgetDatasourceExtHelper;
@Autowired
private apelet.tenantadmin.tenant.service.IRoleFormButtonService roleFormButtonService;
private IRoleFormButtonService roleFormButtonService;
@PostConstruct
private void registerBizWidgetDatasource() {

10
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/RoleFormButtonController.java → common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
package apelet.tenantadmin.tenant.controller;
package apelet.common.online.controller;
import apelet.common.core.annotation.MyRequestBody;
import apelet.common.core.constant.ErrorCodeEnum;
@ -7,9 +7,9 @@ import apelet.common.core.util.MyCommonUtil; @@ -7,9 +7,9 @@ import apelet.common.core.util.MyCommonUtil;
import apelet.common.core.util.MyPageUtil;
import apelet.common.log.annotation.OperationLog;
import apelet.common.log.model.constant.SysOperationLogType;
import apelet.tenantadmin.tenant.dto.RoleFormButtonDto;
import apelet.tenantadmin.tenant.model.RoleFormButton;
import apelet.tenantadmin.tenant.service.IRoleFormButtonService;
import apelet.common.online.dto.RoleFormButtonDto;
import apelet.common.online.model.RoleFormButton;
import apelet.common.online.service.IRoleFormButtonService;
import com.github.pagehelper.page.PageMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -25,7 +25,7 @@ import java.util.Set; @@ -25,7 +25,7 @@ import java.util.Set;
* @date 2026-07-17
*/
@RestController
@RequestMapping("/tenantadmin/tenant/roleFormButton")
@RequestMapping("${common-online.urlPrefix}/roleFormButton")
public class RoleFormButtonController {
@Autowired

4
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/RoleFormButtonMapper.java → common/common-online/src/main/java/apelet/common/online/dao/RoleFormButtonMapper.java

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
package apelet.tenantadmin.tenant.dao;
package apelet.common.online.dao;
import apelet.common.core.base.dao.BaseDaoMapper;
import apelet.tenantadmin.tenant.model.RoleFormButton;
import apelet.common.online.model.RoleFormButton;
import org.apache.ibatis.annotations.Param;
import java.util.List;

4
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dao/mapper/RoleFormButtonMapper.xml → common/common-online/src/main/java/apelet/common/online/dao/mapper/RoleFormButtonMapper.xml

@ -1,10 +1,10 @@ @@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="apelet.tenantadmin.tenant.dao.RoleFormButtonMapper">
<mapper namespace="apelet.common.online.dao.RoleFormButtonMapper">
<select id="getListByFilter"
resultType="apelet.tenantadmin.tenant.model.RoleFormButton">
resultType="apelet.common.online.model.RoleFormButton">
SELECT * FROM xy_sys_role_form_button
WHERE 1=1
<if test="filter.roleId != null">

2
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/dto/RoleFormButtonDto.java → common/common-online/src/main/java/apelet/common/online/dto/RoleFormButtonDto.java

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
package apelet.tenantadmin.tenant.dto;
package apelet.common.online.dto;
import lombok.Data;

4
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/model/RoleFormButton.java → common/common-online/src/main/java/apelet/common/online/model/RoleFormButton.java

@ -1,9 +1,9 @@ @@ -1,9 +1,9 @@
package apelet.tenantadmin.tenant.model;
package apelet.common.online.model;
import apelet.common.core.base.mapper.BaseModelMapper;
import apelet.common.core.base.model.BaseModel;
import apelet.common.core.validator.UpdateGroup;
import apelet.tenantadmin.tenant.vo.RoleFormButtonVo;
import apelet.common.online.vo.RoleFormButtonVo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

6
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IRoleFormButtonService.java → common/common-online/src/main/java/apelet/common/online/service/IRoleFormButtonService.java

@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
package apelet.tenantadmin.tenant.service;
package apelet.common.online.service;
import apelet.common.core.base.service.IBaseService;
import apelet.common.core.object.CallResult;
import apelet.common.core.object.MyOrderParam;
import apelet.common.core.object.MyPageData;
import apelet.common.core.object.MyPageParam;
import apelet.tenantadmin.tenant.dto.RoleFormButtonDto;
import apelet.tenantadmin.tenant.model.RoleFormButton;
import apelet.common.online.dto.RoleFormButtonDto;
import apelet.common.online.model.RoleFormButton;
import java.util.List;
import java.util.Map;

39
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/FormButtonPermissionCheckerImpl.java → common/common-online/src/main/java/apelet/common/online/service/impl/FormButtonPermissionCheckerImpl.java

@ -1,14 +1,12 @@ @@ -1,14 +1,12 @@
package apelet.tenantadmin.tenant.service.impl;
package apelet.common.online.service.impl;
import apelet.common.core.object.TokenData;
import apelet.common.online.model.RoleFormButton;
import apelet.common.online.service.FormButtonPermissionChecker;
import apelet.tenantadmin.tenant.model.RoleFormButton;
import apelet.tenantadmin.tenant.service.IRoleFormButtonService;
import apelet.tenantadmin.tenant.util.WidgetJsonButtonParser;
import apelet.tenantadmin.upms.dao.SysUserRoleMapper;
import apelet.tenantadmin.upms.model.SysUserRole;
import apelet.common.online.service.IRoleFormButtonService;
import apelet.common.online.util.WidgetJsonButtonParser;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -29,15 +27,12 @@ import java.util.stream.Collectors; @@ -29,15 +27,12 @@ import java.util.stream.Collectors;
public class FormButtonPermissionCheckerImpl implements FormButtonPermissionChecker {
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Autowired
private IRoleFormButtonService roleFormButtonService;
@Override
public boolean hasPermission(Long formId, String buttonName) {
try {
// 1. 获取当前登录用户ID
// 1. 获取当前登录用户信息
TokenData tokenData = TokenData.takeFromRequest();
if (tokenData == null) {
log.warn("TokenData 为空,无法校验按钮权限");
@ -48,29 +43,19 @@ public class FormButtonPermissionCheckerImpl implements FormButtonPermissionChec @@ -48,29 +43,19 @@ public class FormButtonPermissionCheckerImpl implements FormButtonPermissionChec
return false;
}
// 2. 获取用户的所有角色
List<SysUserRole> userRoles = sysUserRoleMapper.selectList(
new LambdaQueryWrapper<SysUserRole>()
.eq(SysUserRole::getUserId, userId));
if (userRoles.isEmpty()) {
// 2. 从 TokenData 获取用户的所有角色ID
if (StrUtil.isBlank(tokenData.getRoleIds())) {
return false;
}
List<Long> roleIds = userRoles.stream()
.map(SysUserRole::getRoleId)
.collect(Collectors.toList());
List<Long> roleIds = StrUtil.split(tokenData.getRoleIds(), ',').stream().map(Long::valueOf).collect(Collectors.toList());
// 3. 遍历角色,检查是否有任一角色授权了该表单的该按钮
for (Long roleId : roleIds) {
RoleFormButton config =
roleFormButtonService.getByRoleIdAndFormId(roleId, formId);
RoleFormButton config = roleFormButtonService.getByRoleIdAndFormId(roleId, formId);
if (config != null && config.getButtonConfig() != null) {
List<WidgetJsonButtonParser.ButtonInfo> buttons =
JSON.parseArray(config.getButtonConfig(),
WidgetJsonButtonParser.ButtonInfo.class);
List<WidgetJsonButtonParser.ButtonInfo> buttons = JSON.parseArray(config.getButtonConfig(), WidgetJsonButtonParser.ButtonInfo.class);
for (WidgetJsonButtonParser.ButtonInfo btn : buttons) {
if (buttonName.equals(btn.getName())
&& Boolean.TRUE.equals(btn.getEnabled())) {
if (buttonName.equals(btn.getName()) && Boolean.TRUE.equals(btn.getEnabled())) {
return true;
}
}

12
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/RoleFormButtonServiceImpl.java → common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java

@ -1,18 +1,18 @@ @@ -1,18 +1,18 @@
package apelet.tenantadmin.tenant.service.impl;
package apelet.common.online.service.impl;
import apelet.common.core.base.dao.BaseDaoMapper;
import apelet.common.core.base.service.BaseService;
import apelet.common.core.object.*;
import apelet.common.online.dao.RoleFormButtonMapper;
import apelet.common.online.dto.RoleFormButtonDto;
import apelet.common.online.model.OnlineForm;
import apelet.common.online.model.OnlinePage;
import apelet.common.online.model.RoleFormButton;
import apelet.common.online.service.IRoleFormButtonService;
import apelet.common.online.service.OnlineFormService;
import apelet.common.online.service.OnlinePageService;
import apelet.common.online.util.WidgetJsonButtonParser;
import apelet.common.sequence.wrapper.IdGeneratorWrapper;
import apelet.tenantadmin.tenant.dao.RoleFormButtonMapper;
import apelet.tenantadmin.tenant.dto.RoleFormButtonDto;
import apelet.tenantadmin.tenant.model.RoleFormButton;
import apelet.tenantadmin.tenant.service.IRoleFormButtonService;
import apelet.tenantadmin.tenant.util.WidgetJsonButtonParser;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;

2
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/util/WidgetJsonButtonParser.java → common/common-online/src/main/java/apelet/common/online/util/WidgetJsonButtonParser.java

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
package apelet.tenantadmin.tenant.util;
package apelet.common.online.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;

4
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/vo/RoleFormButtonVo.java → common/common-online/src/main/java/apelet/common/online/vo/RoleFormButtonVo.java

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
package apelet.tenantadmin.tenant.vo;
package apelet.common.online.vo;
import apelet.tenantadmin.tenant.model.RoleFormButton;
import apelet.common.online.model.RoleFormButton;
import lombok.Data;
import lombok.EqualsAndHashCode;
Loading…
Cancel
Save