Browse Source

refactor(tenant): 重构角色表单按钮权限配置服务

- 修改 IRoleFormButtonService 接口返回类型为 Map<String, Set<String>>
feature/form-permission-control
chenchuchuan 2 weeks ago
parent
commit
b2dc6af80f
  1. 10
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/RoleFormButtonController.java
  2. 3
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IRoleFormButtonService.java
  3. 57
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/RoleFormButtonServiceImpl.java

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

@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* 角色-表单按钮权限控制器 * 角色-表单按钮权限控制器
@ -38,13 +39,8 @@ public class RoleFormButtonController {
* @return 包含 formId, buttonList[{name, checked}] * @return 包含 formId, buttonList[{name, checked}]
*/ */
@GetMapping("/getButtonConfig") @GetMapping("/getButtonConfig")
public ResponseResult<Map<String, Object>> getButtonConfig( public ResponseResult<Map<String, Set<String>>> getButtonConfig(@RequestParam(required = false) Long formId) {
@RequestParam Long formId) { return ResponseResult.success(service.getButtonConfigVo(formId));
if (MyCommonUtil.existBlankArgument(formId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
Map<String, Object> result = service.getButtonConfigVo(formId);
return ResponseResult.success(result);
} }
/** /**

3
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IRoleFormButtonService.java

@ -10,6 +10,7 @@ import apelet.tenantadmin.tenant.model.RoleFormButton;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* 角色-表单按钮权限配置服务接口 * 角色-表单按钮权限配置服务接口
@ -33,7 +34,7 @@ public interface IRoleFormButtonService
* @param formId 在线表单ID * @param formId 在线表单ID
* @return 包含 formId, buttonList(含name+checked的列表) * @return 包含 formId, buttonList(含name+checked的列表)
*/ */
Map<String, Object> getButtonConfigVo(Long formId); Map<String, Set<String>> getButtonConfigVo(Long formId);
/** /**
* 批量保存按钮权限配置同一事务内全部成功或全部回滚 * 批量保存按钮权限配置同一事务内全部成功或全部回滚

57
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/RoleFormButtonServiceImpl.java

@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod; import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -64,50 +65,28 @@ public class RoleFormButtonServiceImpl extends BaseService<RoleFormButton, Long>
// ========== 核心:查询按钮配置VO(合并当前用户所有角色) ========== // ========== 核心:查询按钮配置VO(合并当前用户所有角色) ==========
@Override @Override
public Map<String, Object> getButtonConfigVo(Long formId) { public Map<String, Set<String>> getButtonConfigVo(Long formId) {
Map<String, Object> result = new HashMap<>(); // 1. 获取当前登录用户的所有角色
result.put("formId", formId);
// 1. 获取 widgetJson,提取所有开启的按钮
OnlineForm onlineForm = onlineFormService.getById(formId);
if (onlineForm == null) {
result.put("buttonList", Collections.emptyList());
return result;
}
List<WidgetJsonButtonParser.ButtonInfo> enabledButtons = WidgetJsonButtonParser.extractEnabledButtons(onlineForm.getWidgetJson());
// 2. 获取当前登录用户的所有角色
Set<Long> roleIds = getCurrentUserRoleIds(); Set<Long> roleIds = getCurrentUserRoleIds();
// Set<Long> roleIds = CollectionUtil.newHashSet(2080534691714174976L, 1694263314487447643L);
// 3. 遍历所有角色,合并各角色在该表单的勾选按钮(取并集) if (CollectionUtil.isEmpty(roleIds)) {
Set<String> checkedNames = new HashSet<>(); return Collections.emptyMap();
if (CollectionUtil.isNotEmpty(roleIds)) {
for (Long roleId : roleIds) {
RoleFormButton config = getByRoleIdAndFormId(roleId, formId);
if (config != null && config.getButtonConfig() != null) {
List<WidgetJsonButtonParser.ButtonInfo> savedButtons =
JSON.parseArray(config.getButtonConfig(),
WidgetJsonButtonParser.ButtonInfo.class);
for (WidgetJsonButtonParser.ButtonInfo btn : savedButtons) {
if (Boolean.TRUE.equals(btn.getEnabled())) {
checkedNames.add(btn.getName());
}
} }
List<RoleFormButton> roleFormButtonList = mapper.selectList(new LambdaQueryWrapper<RoleFormButton>().in(RoleFormButton::getRoleId, roleIds));
if (CollectionUtil.isEmpty(roleFormButtonList)) {
return Collections.emptyMap();
} }
// 2. 遍历所有角色,合并各角色在该表单的勾选按钮(取并集)
Map<String, Set<String>> roleCheckedNamesMap = new HashMap<>();
for (RoleFormButton roleFormButton : roleFormButtonList) {
if (StringUtils.isBlank(roleFormButton.getButtonConfig())) {
continue;
} }
List<WidgetJsonButtonParser.ButtonInfo> buttonInfoList = JSON.parseArray(roleFormButton.getButtonConfig(), WidgetJsonButtonParser.ButtonInfo.class);
Set<String> checkedNames = buttonInfoList.stream().filter(btn -> btn.getEnabled() != null && btn.getEnabled()).map(WidgetJsonButtonParser.ButtonInfo::getName).collect(Collectors.toSet());
roleCheckedNamesMap.computeIfAbsent(Long.toString(roleFormButton.getFormId()), k -> new HashSet<>()).addAll(checkedNames);
} }
return roleCheckedNamesMap;
// 4. 合并:表单所有开启的按钮 + 是否勾选
List<Map<String, Object>> buttonList = new ArrayList<>();
for (WidgetJsonButtonParser.ButtonInfo btn : enabledButtons) {
Map<String, Object> item = new HashMap<>();
item.put("name", btn.getName());
item.put("checked", checkedNames.contains(btn.getName()));
buttonList.add(item);
}
result.put("buttonList", buttonList);
return result;
} }
/** /**

Loading…
Cancel
Save