diff --git a/src/main/java/com/xuxd/kafka/console/controller/ClusterController.java b/src/main/java/com/xuxd/kafka/console/controller/ClusterController.java index 2fc090f..d7a6a78 100644 --- a/src/main/java/com/xuxd/kafka/console/controller/ClusterController.java +++ b/src/main/java/com/xuxd/kafka/console/controller/ClusterController.java @@ -31,7 +31,7 @@ public class ClusterController { return clusterService.getClusterInfo(); } - @Permission("op:cluster-switch") + @Permission({"op:cluster-switch", "user-manage:cluster-role:add"}) @GetMapping("/info") public Object getClusterInfoList() { return clusterService.getClusterInfoList(); diff --git a/src/main/java/com/xuxd/kafka/console/service/impl/ClusterRoleRelationServiceImpl.java b/src/main/java/com/xuxd/kafka/console/service/impl/ClusterRoleRelationServiceImpl.java index 3abbb56..b8012de 100644 --- a/src/main/java/com/xuxd/kafka/console/service/impl/ClusterRoleRelationServiceImpl.java +++ b/src/main/java/com/xuxd/kafka/console/service/impl/ClusterRoleRelationServiceImpl.java @@ -1,5 +1,6 @@ package com.xuxd.kafka.console.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xuxd.kafka.console.beans.ResponseData; import com.xuxd.kafka.console.beans.dos.ClusterInfoDO; import com.xuxd.kafka.console.beans.dos.ClusterRoleRelationDO; @@ -10,6 +11,7 @@ import com.xuxd.kafka.console.dao.ClusterInfoMapper; import com.xuxd.kafka.console.dao.ClusterRoleRelationMapper; import com.xuxd.kafka.console.dao.SysRoleMapper; import com.xuxd.kafka.console.service.ClusterRoleRelationService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; @@ -21,6 +23,7 @@ import java.util.stream.Collectors; * @author: xuxd * @since: 2023/8/23 21:50 **/ +@Slf4j @Service public class ClusterRoleRelationServiceImpl implements ClusterRoleRelationService { @@ -62,7 +65,18 @@ public class ClusterRoleRelationServiceImpl implements ClusterRoleRelationServic @Override public ResponseData add(ClusterRoleRelationDTO dto) { - mapper.insert(dto.toDO()); + ClusterRoleRelationDO relationDO = dto.toDO(); + if (relationDO.getClusterInfoId() == -1L) { + // all insert + for (ClusterInfoDO clusterInfoDO : clusterInfoMapper.selectList(null)) { + ClusterRoleRelationDO aDo = new ClusterRoleRelationDO(); + aDo.setRoleId(relationDO.getRoleId()); + aDo.setClusterInfoId(clusterInfoDO.getId()); + insertIfNotExist(aDo); + } + } else { + insertIfNotExist(relationDO); + } return ResponseData.create().success(); } @@ -71,4 +85,16 @@ public class ClusterRoleRelationServiceImpl implements ClusterRoleRelationServic mapper.deleteById(id); return ResponseData.create().success(); } + + private void insertIfNotExist(ClusterRoleRelationDO relationDO) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_id", relationDO.getRoleId()). + eq("cluster_info_id", relationDO.getClusterInfoId()); + Integer count = mapper.selectCount(queryWrapper); + if (count > 0) { + log.info("已存在,不再增加:{}", relationDO); + return; + } + mapper.insert(relationDO); + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 97967c0..2e39b41 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -50,7 +50,7 @@ cron: # 权限认证设置,设置为true,需要先登录才能访问 auth: - enable: false + enable: true # 登录用户token的过期时间,单位:小时 expire-hours: 24 # 隐藏集群的属性信息,如果当前用户没有集群切换里的编辑权限,就不能看集群的属性信息,有开启ACL的集群需要开启这个 diff --git a/ui/src/utils/api.js b/ui/src/utils/api.js index 86a618b..659a41f 100644 --- a/ui/src/utils/api.js +++ b/ui/src/utils/api.js @@ -358,3 +358,18 @@ export const AuthApi = { method: "post", }, }; + +export const ClusterRoleRelationApi = { + select: { + url: "/cluster-role/relation", + method: "get", + }, + add: { + url: "/cluster-role/relation", + method: "post", + }, + delete: { + url: "/cluster-role/relation", + method: "delete", + }, +}; diff --git a/ui/src/views/user/ClusterRoleRelation.vue b/ui/src/views/user/ClusterRoleRelation.vue new file mode 100644 index 0000000..136762a --- /dev/null +++ b/ui/src/views/user/ClusterRoleRelation.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/ui/src/views/user/CreateClusterRoleRelation.vue b/ui/src/views/user/CreateClusterRoleRelation.vue new file mode 100644 index 0000000..0dd1346 --- /dev/null +++ b/ui/src/views/user/CreateClusterRoleRelation.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/ui/src/views/user/Role.vue b/ui/src/views/user/Role.vue index 42b44ed..1c98a00 100644 --- a/ui/src/views/user/Role.vue +++ b/ui/src/views/user/Role.vue @@ -46,6 +46,7 @@
+

角色信息配置

+ +

功能权限配置

e.username.indexOf(this.filterUsername) != -1 + (e) => e && e.username && e.username.indexOf(this.filterUsername) != -1 ); }, onUsernameChange(input) { diff --git a/ui/src/views/user/UserManage.vue b/ui/src/views/user/UserManage.vue index babc5a5..dc3a4dd 100644 --- a/ui/src/views/user/UserManage.vue +++ b/ui/src/views/user/UserManage.vue @@ -18,13 +18,20 @@ + + + @@ -40,10 +47,11 @@ import Permission from "@/views/user/Permission.vue"; import Role from "@/views/user/Role.vue"; import User from "@/views/user/User.vue"; import UserSetting from "@/views/user/UserSetting.vue"; +import ClusterRoleRelation from "@/views/user/ClusterRoleRelation.vue"; import { isAuthorized } from "@/utils/auth"; export default { name: "UserManage", - components: { Permission, Role, User, UserSetting }, + components: { Permission, Role, User, UserSetting, ClusterRoleRelation }, data() { return { loading: false,