用户权限展示.
This commit is contained in:
@@ -0,0 +1,40 @@
|
|||||||
|
package com.xuxd.kafka.console.beans.vo;
|
||||||
|
|
||||||
|
import com.xuxd.kafka.console.beans.dos.SysPermissionDO;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: xuxd
|
||||||
|
* @date: 2023/4/17 21:18
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class SysPermissionVO {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限类型: 0:菜单,1:按钮
|
||||||
|
*/
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
private String permission;
|
||||||
|
|
||||||
|
private Long key;
|
||||||
|
|
||||||
|
private List<SysPermissionVO> children;
|
||||||
|
|
||||||
|
public static SysPermissionVO from(SysPermissionDO permissionDO) {
|
||||||
|
SysPermissionVO permissionVO = new SysPermissionVO();
|
||||||
|
|
||||||
|
permissionVO.setPermission(permissionDO.getPermission());
|
||||||
|
permissionVO.setType(permissionDO.getType());
|
||||||
|
permissionVO.setName(permissionDO.getName());
|
||||||
|
permissionVO.setParentId(permissionDO.getParentId());
|
||||||
|
permissionVO.setKey(permissionDO.getId());
|
||||||
|
return permissionVO;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,10 +5,7 @@ import com.xuxd.kafka.console.beans.dto.SysPermissionDTO;
|
|||||||
import com.xuxd.kafka.console.beans.dto.SysRoleDTO;
|
import com.xuxd.kafka.console.beans.dto.SysRoleDTO;
|
||||||
import com.xuxd.kafka.console.beans.dto.SysUserDTO;
|
import com.xuxd.kafka.console.beans.dto.SysUserDTO;
|
||||||
import com.xuxd.kafka.console.service.UserManageService;
|
import com.xuxd.kafka.console.service.UserManageService;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author: xuxd
|
* @author: xuxd
|
||||||
@@ -41,4 +38,9 @@ public class UserManageController {
|
|||||||
public Object addPermission(@RequestBody SysPermissionDTO permissionDTO) {
|
public Object addPermission(@RequestBody SysPermissionDTO permissionDTO) {
|
||||||
return userManageService.addPermission(permissionDTO);
|
return userManageService.addPermission(permissionDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/permission")
|
||||||
|
public Object selectPermission() {
|
||||||
|
return userManageService.selectPermission();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,4 +21,6 @@ public interface UserManageService {
|
|||||||
ResponseData addRole(SysRoleDTO roleDTO);
|
ResponseData addRole(SysRoleDTO roleDTO);
|
||||||
|
|
||||||
ResponseData addUser(SysUserDTO userDTO);
|
ResponseData addUser(SysUserDTO userDTO);
|
||||||
|
|
||||||
|
ResponseData selectPermission();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
package com.xuxd.kafka.console.service.impl;
|
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.ResponseData;
|
||||||
|
import com.xuxd.kafka.console.beans.dos.SysPermissionDO;
|
||||||
import com.xuxd.kafka.console.beans.dto.SysPermissionDTO;
|
import com.xuxd.kafka.console.beans.dto.SysPermissionDTO;
|
||||||
import com.xuxd.kafka.console.beans.dto.SysRoleDTO;
|
import com.xuxd.kafka.console.beans.dto.SysRoleDTO;
|
||||||
import com.xuxd.kafka.console.beans.dto.SysUserDTO;
|
import com.xuxd.kafka.console.beans.dto.SysUserDTO;
|
||||||
|
import com.xuxd.kafka.console.beans.vo.SysPermissionVO;
|
||||||
import com.xuxd.kafka.console.dao.SysPermissionMapper;
|
import com.xuxd.kafka.console.dao.SysPermissionMapper;
|
||||||
import com.xuxd.kafka.console.dao.SysRoleMapper;
|
import com.xuxd.kafka.console.dao.SysRoleMapper;
|
||||||
import com.xuxd.kafka.console.dao.SysUserMapper;
|
import com.xuxd.kafka.console.dao.SysUserMapper;
|
||||||
@@ -12,6 +15,9 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author: xuxd
|
* @author: xuxd
|
||||||
* @date: 2023/4/11 21:24
|
* @date: 2023/4/11 21:24
|
||||||
@@ -51,4 +57,59 @@ public class UserManageServiceImpl implements UserManageService {
|
|||||||
userMapper.insert(userDTO.toDO());
|
userMapper.insert(userDTO.toDO());
|
||||||
return ResponseData.create().success();
|
return ResponseData.create().success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseData selectPermission() {
|
||||||
|
QueryWrapper<SysPermissionDO> queryWrapper = new QueryWrapper<>();
|
||||||
|
|
||||||
|
List<SysPermissionDO> permissionDOS = permissionMapper.selectList(queryWrapper);
|
||||||
|
List<SysPermissionVO> vos = new ArrayList<>();
|
||||||
|
Map<Long, Integer> posMap = new HashMap<>();
|
||||||
|
Map<Long, SysPermissionVO> voMap = new HashMap<>();
|
||||||
|
|
||||||
|
Iterator<SysPermissionDO> iterator = permissionDOS.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
SysPermissionDO permissionDO = iterator.next();
|
||||||
|
if (permissionDO.getParentId() == null) {
|
||||||
|
// 菜单
|
||||||
|
SysPermissionVO vo = SysPermissionVO.from(permissionDO);
|
||||||
|
vos.add(vo);
|
||||||
|
int index = vos.size() - 1;
|
||||||
|
// 记录位置
|
||||||
|
posMap.put(permissionDO.getId(), index);
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 上面把菜单都处理过了
|
||||||
|
while (!permissionDOS.isEmpty()) {
|
||||||
|
iterator = permissionDOS.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
SysPermissionDO permissionDO = iterator.next();
|
||||||
|
Long parentId = permissionDO.getParentId();
|
||||||
|
if (posMap.containsKey(parentId)) {
|
||||||
|
// 菜单下的按扭
|
||||||
|
SysPermissionVO vo = SysPermissionVO.from(permissionDO);
|
||||||
|
Integer index = posMap.get(parentId);
|
||||||
|
SysPermissionVO menuVO = vos.get(index);
|
||||||
|
if (menuVO.getChildren() == null) {
|
||||||
|
menuVO.setChildren(new ArrayList<>());
|
||||||
|
}
|
||||||
|
menuVO.getChildren().add(vo);
|
||||||
|
voMap.put(permissionDO.getId(), vo);
|
||||||
|
iterator.remove();
|
||||||
|
} else if (voMap.containsKey(parentId)) {
|
||||||
|
// 按钮下的按扭
|
||||||
|
SysPermissionVO vo = SysPermissionVO.from(permissionDO);
|
||||||
|
SysPermissionVO buttonVO = voMap.get(parentId);
|
||||||
|
if (buttonVO.getChildren() == null) {
|
||||||
|
buttonVO.setChildren(new ArrayList<>());
|
||||||
|
}
|
||||||
|
buttonVO.getChildren().add(vo);
|
||||||
|
voMap.put(permissionDO.getId(), vo);
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ResponseData.create().data(vos).success();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
<springProperty scope="context" name="LOGGING_HOME" source="logging.home"/>
|
<springProperty scope="context" name="LOGGING_HOME" source="logging.home"/>
|
||||||
|
|
||||||
<!-- 日志目录 -->
|
<!-- 日志目录 -->
|
||||||
<property name="LOG_HOME" value="${LOGGING_HOME}/logs"/>
|
<property name="LOG_HOME" value="${LOGGING_HOME:-${user.dir}}/logs"/>
|
||||||
<!-- 日志文件名-->
|
<!-- 日志文件名-->
|
||||||
<property name="APP_NAME" value="${APPLICATION_NAME:-.}"/>
|
<property name="APP_NAME" value="${APPLICATION_NAME:-kafka-console-ui}"/>
|
||||||
|
|
||||||
<!-- 使用默认的输出格式-->
|
<!-- 使用默认的输出格式-->
|
||||||
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
|
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
|
||||||
|
|||||||
@@ -307,4 +307,15 @@ export const KafkaClientQuotaApi = {
|
|||||||
url: "/client/quota",
|
url: "/client/quota",
|
||||||
method: "delete",
|
method: "delete",
|
||||||
},
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const UserManageApi = {
|
||||||
|
getPermissions: {
|
||||||
|
url: "/sys/user/manage/permission",
|
||||||
|
method: "get",
|
||||||
|
},
|
||||||
|
addPermission: {
|
||||||
|
url: "/sys/user/manage/permission",
|
||||||
|
method: "post",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
103
ui/src/views/user/Permission.vue
Normal file
103
ui/src/views/user/Permission.vue
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
<a-spin :spinning="loading">
|
||||||
|
<a-table
|
||||||
|
:columns="columns"
|
||||||
|
:data-source="data"
|
||||||
|
:row-selection="rowSelection"
|
||||||
|
:expanded-row-keys.sync="expandedRowKeys"
|
||||||
|
>
|
||||||
|
<div slot="type" slot-scope="text">
|
||||||
|
<span v-if="text == 0" style="color: darkgreen">菜单</span
|
||||||
|
><span v-else>按钮</span>
|
||||||
|
</div>
|
||||||
|
</a-table>
|
||||||
|
</a-spin>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import request from "@/utils/request";
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: "权限名称",
|
||||||
|
dataIndex: "name",
|
||||||
|
key: "name",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "类型",
|
||||||
|
dataIndex: "type",
|
||||||
|
key: "type",
|
||||||
|
width: "12%",
|
||||||
|
slots: { title: "type" },
|
||||||
|
scopedSlots: { customRender: "type" },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "权限标记",
|
||||||
|
dataIndex: "permission",
|
||||||
|
width: "30%",
|
||||||
|
key: "permission",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const rowSelection = {
|
||||||
|
onChange: (selectedRowKeys, selectedRows) => {
|
||||||
|
console.log(
|
||||||
|
`selectedRowKeys: ${selectedRowKeys}`,
|
||||||
|
"selectedRows: ",
|
||||||
|
selectedRows
|
||||||
|
);
|
||||||
|
},
|
||||||
|
onSelect: (record, selected, selectedRows) => {
|
||||||
|
console.log(record, selected, selectedRows);
|
||||||
|
},
|
||||||
|
onSelectAll: (selected, selectedRows, changeRows) => {
|
||||||
|
console.log(selected, selectedRows, changeRows);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
import { UserManageApi } from "@/utils/api";
|
||||||
|
import notification from "ant-design-vue/lib/notification";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Permission",
|
||||||
|
components: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
data: [],
|
||||||
|
columns,
|
||||||
|
rowSelection,
|
||||||
|
expandedRowKeys: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getPermissions() {
|
||||||
|
this.loading = true;
|
||||||
|
request({
|
||||||
|
url: UserManageApi.getPermissions.url,
|
||||||
|
method: UserManageApi.getPermissions.method,
|
||||||
|
}).then((res) => {
|
||||||
|
this.loading = false;
|
||||||
|
if (res.code == 0) {
|
||||||
|
this.data = res.data;
|
||||||
|
} else {
|
||||||
|
notification.error({
|
||||||
|
message: "error",
|
||||||
|
description: res.msg,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getPermissions();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.editable-row-operations a {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -2,24 +2,22 @@
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<a-spin :spinning="loading">
|
<a-spin :spinning="loading">
|
||||||
<a-tabs default-active-key="1" size="large" tabPosition="top">
|
<a-tabs default-active-key="1" size="large" tabPosition="top">
|
||||||
<a-tab-pane key="1" tab="用户列表">
|
<a-tab-pane key="1" tab="用户列表"> </a-tab-pane>
|
||||||
</a-tab-pane>
|
<a-tab-pane key="2" tab="角色列表"> </a-tab-pane>
|
||||||
<a-tab-pane key="2" tab="角色列表">
|
|
||||||
</a-tab-pane>
|
|
||||||
<a-tab-pane key="3" tab="权限列表">
|
<a-tab-pane key="3" tab="权限列表">
|
||||||
|
<Permission></Permission>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane key="4" tab="个人设置">
|
<a-tab-pane key="4" tab="个人设置"> </a-tab-pane>
|
||||||
</a-tab-pane>
|
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
</a-spin>
|
</a-spin>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Permission from "@/views/user/Permission.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "UserManage",
|
name: "UserManage",
|
||||||
components: {},
|
components: { Permission },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
loading: false,
|
||||||
@@ -27,8 +25,7 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {},
|
methods: {},
|
||||||
created() {
|
created() {},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user