From 238507de19643a03fd6338bc40df5d324b7078dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E6=99=93=E4=B8=9C?= <763795151@qq.com> Date: Mon, 15 May 2023 21:58:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E9=85=8D=E7=BD=AE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 2 +- src/main/resources/db/data-h2.sql | 69 +++++++++++++++++++++++++++++- ui/src/App.vue | 36 ++++++++++++++-- ui/src/directives/action.js | 13 ++++++ ui/src/main.js | 1 + ui/src/store/index.js | 11 +++-- ui/src/store/mutation-types.js | 3 +- ui/src/utils/constants.js | 4 ++ ui/src/utils/local-cache.js | 32 ++++++++++++++ ui/src/views/Home.vue | 2 +- ui/src/views/login/Login.vue | 4 +- ui/src/views/topic/Topic.vue | 3 +- ui/src/views/user/Role.vue | 12 ++++++ 13 files changed, 180 insertions(+), 12 deletions(-) create mode 100644 ui/src/directives/action.js diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e372073..304feee 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -50,6 +50,6 @@ cron: # 权限认证设置,设置为true,需要先登录才能访问 auth: - enable: true + enable: false # 登录用户token的过期时间,单位:小时 expire-hours: 24 \ No newline at end of file diff --git a/src/main/resources/db/data-h2.sql b/src/main/resources/db/data-h2.sql index a9a1360..775b1be 100644 --- a/src/main/resources/db/data-h2.sql +++ b/src/main/resources/db/data-h2.sql @@ -2,4 +2,71 @@ -- -- INSERT INTO t_kafka_user (id, username, password) VALUES -- (1, 'Jone', 'p1'), --- (2, 'Jack', 'p2'); \ No newline at end of file +-- (2, 'Jack', 'p2'); + +insert into t_sys_permission(id, name,type,parent_id,permission) values(0,'主页',0,null,'home'); + +insert into t_sys_permission(id, name,type,parent_id,permission) values(10,'集群',0,null,'cluster'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(11,'集群信息',1,10,'cluster'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(12,'属性配置',1,11,'cluster:property-config'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(13,'日志配置',1,11,'cluster:log-config'); + +insert into t_sys_permission(id, name,type,parent_id,permission) values(20,'Topic',0,null,'topic'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(21,'topic',1,20,'topic'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(22,'刷新',1,21,'topic:load'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(23,'新增',1,21,'topic:add'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(24,'批量删除',1,21,'topic:batch-del'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(25,'删除',1,21,'topic:del'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(26,'分区详情',1,21,'topic:partition-detail'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(27,'首选副本作leader',1,26,'topic:partition-detail:preferred'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(28,'增加分区',1,21,'topic:partition-add'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(29,'消费详情',1,21,'topic:consumer-detail'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(30,'属性配置',1,21,'topic:property-config'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(31,'变更副本',1,21,'topic:replication-modify'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(32,'发送统计',1,21,'topic:send-count'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(33,'限流',1,21,'topic:replication-sync-throttle'); + +insert into t_sys_permission(id, name,type,parent_id,permission) values(40,'消费组',0,null,'group'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(41,'消费组',1,40,'group:load'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(42,'新增订阅',1,41,'group:add'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(43,'删除',1,41,'group:del'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(44,'消费端',1,41,'group:client'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(45,'消费详情',1,41,'group:consumer-detail'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(46,'最小位点',1,45,'group:consumer-detail:min'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(47,'最新位点',1,45,'group:consumer-detail:last'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(48,'时间戳',1,45,'group:consumer-detail:timestamp'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(49,'重置位点',1,45,'group:consumer-detail:any'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(50,'位移分区',1,41,'group:offset-partition'); + + +insert into t_sys_permission(id, name,type,parent_id,permission) values(60,'消息',0,null,'message'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(61,'消息',1,60,'message'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(62,'根据时间查询',1,61,'message:search-time'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(63,'根据偏移查询',1,61,'message:search-offset'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(64,'在线发送',1,61,'message:send'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(65,'在线删除',1,61,'message:del'); + +insert into t_sys_permission(id, name,type,parent_id,permission) values(80,'限流',0,null,'quota'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(81,'用户',1,80,'quota:user'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(82,'新增配置',1,81,'quota:user:add'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(83,'客户端ID',1,80,'quota:client'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(84,'新增配置',1,83,'quota:client:add'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(85,'用户和客户端ID',1,80,'quota:user-client'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(86,'新增配置',1,85,'quota:user-client:add'); + + +insert into t_sys_permission(id, name,type,parent_id,permission) values(100,'Acl',0,null,'acl'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(101,'资源授权',1,100,'acl:authority'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(102,'新增权限',1,101,'acl:authority:add'); + +insert into t_sys_permission(id, name,type,parent_id,permission) values(120,'用户',0,null,'user-manage'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(121,'用户列表',1,120,'user-manage:user'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(122,'新增',1,121,'user-manage:user:add'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(123,'删除',1,121,'user-manage:user:del'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(124,'重置密码',1,121,'user-manage:user:reset-pass'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(125,'分配角色',1,121,'user-manage:user:change-role'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(126,'角色列表',1,120,'user-manage:role'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(127,'保存',1,126,'user-manage:role:save'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(128,'删除',1,126,'user-manage:role:del'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(129,'权限列表',1,120,'user-manage:permission'); +insert into t_sys_permission(id, name,type,parent_id,permission) values(130,'个人设置',1,120,'user-manage:setting'); diff --git a/ui/src/App.vue b/ui/src/App.vue index 2d8dde4..1516803 100644 --- a/ui/src/App.vue +++ b/ui/src/App.vue @@ -19,7 +19,23 @@ >用户 |运维 - 集群:{{ clusterName }} +
+ 集群:{{ clusterName }} + + + | + {{ username }} + + + + + + 退出 + + + + +
@@ -28,9 +44,9 @@ import { KafkaClusterApi, AuthApi } from "@/utils/api"; import request from "@/utils/request"; import { mapMutations, mapState } from "vuex"; -import { getClusterInfo } from "@/utils/local-cache"; +import {deleteToken, deleteUsername, getClusterInfo, getUsername} from "@/utils/local-cache"; import notification from "ant-design-vue/lib/notification"; -import {AUTH, CLUSTER} from "@/store/mutation-types"; +import { AUTH, CLUSTER } from "@/store/mutation-types"; export default { data() { @@ -46,13 +62,19 @@ export default { ...mapState({ clusterName: (state) => state.clusterInfo.clusterName, enableSasl: (state) => state.clusterInfo.enableSasl, + showUsername: (state) => state.auth.enable && state.auth.username, + username: (state) => state.auth.username, }), }, methods: { ...mapMutations({ switchCluster: CLUSTER.SWITCH, enableAuth: AUTH.ENABLE, + setUsername: AUTH.SET_USERNAME, }), + beforeLoadFn() { + this.setUsername(getUsername()); + }, intAuthState() { request({ url: AuthApi.enable.url, @@ -85,6 +107,14 @@ export default { this.switchCluster(clusterInfo); } }, + logout() { + deleteToken(); + deleteUsername(); + this.$router.push("/login-page"); + }, + }, + mounted() { + this.beforeLoadFn(); }, }; diff --git a/ui/src/directives/action.js b/ui/src/directives/action.js new file mode 100644 index 0000000..1131a46 --- /dev/null +++ b/ui/src/directives/action.js @@ -0,0 +1,13 @@ +import Vue from "vue"; + +const action = Vue.directive("action", { + inserted: function (el, binding) { + const actionName = binding.arg; + if (actionName != "action") { + (el.parentNode && el.parentNode.removeChild(el)) || + (el.style.display = "none"); + } + }, +}); + +export default action; diff --git a/ui/src/main.js b/ui/src/main.js index 3f9f7ef..ed24114 100644 --- a/ui/src/main.js +++ b/ui/src/main.js @@ -6,6 +6,7 @@ import store from "./store"; import Antd from "ant-design-vue"; import "ant-design-vue/dist/antd.css"; import { VueAxios } from "./utils/request"; +import "@/directives/action"; Vue.config.productionTip = false; Vue.use(Antd); diff --git a/ui/src/store/index.js b/ui/src/store/index.js index 9ef4040..99595d0 100644 --- a/ui/src/store/index.js +++ b/ui/src/store/index.js @@ -1,7 +1,7 @@ import Vue from "vue"; import Vuex from "vuex"; import { CLUSTER, AUTH } from "@/store/mutation-types"; -import { setClusterInfo } from "@/utils/local-cache"; +import { setClusterInfo, setToken, setUsername } from "@/utils/local-cache"; Vue.use(Vuex); @@ -14,6 +14,7 @@ export default new Vuex.Store({ }, auth: { enable: false, + username: "", }, }, mutations: { @@ -34,8 +35,12 @@ export default new Vuex.Store({ [AUTH.ENABLE](state, enable) { state.auth.enable = enable; }, - [AUTH.SET](state, info) { - localStorage.setItem("access_token", info); + [AUTH.SET_TOKEN](state, info) { + setToken(info); + }, + [AUTH.SET_USERNAME](state, username) { + setUsername(username); + state.auth.username = username; }, }, actions: {}, diff --git a/ui/src/store/mutation-types.js b/ui/src/store/mutation-types.js index 227a790..090b5b9 100644 --- a/ui/src/store/mutation-types.js +++ b/ui/src/store/mutation-types.js @@ -4,5 +4,6 @@ export const CLUSTER = { export const AUTH = { ENABLE: "enable", - SET: "setToken", + SET_TOKEN: "setToken", + SET_USERNAME: "setUsername", }; diff --git a/ui/src/utils/constants.js b/ui/src/utils/constants.js index bd15f7a..c5432b9 100644 --- a/ui/src/utils/constants.js +++ b/ui/src/utils/constants.js @@ -4,4 +4,8 @@ export const ConstantEvent = { export const Cache = { clusterInfo: "clusterInfo", + auth: "auth", + token: "access_token", + username: "login_user", + enableAuth: "enable_auth", }; diff --git a/ui/src/utils/local-cache.js b/ui/src/utils/local-cache.js index 23ebeb9..be8a174 100644 --- a/ui/src/utils/local-cache.js +++ b/ui/src/utils/local-cache.js @@ -8,3 +8,35 @@ export function getClusterInfo() { const str = localStorage.getItem(Cache.clusterInfo); return str ? JSON.parse(str) : undefined; } + +// export function setAuth(auth) { +// localStorage.setItem(Cache.auth, JSON.stringify(auth)); +// } + +export function setToken(token) { + localStorage.setItem(Cache.token, token); +} + +export function getToken() { + return localStorage.getItem(Cache.token); +} + +export function deleteToken() { + localStorage.removeItem(Cache.token); +} + +export function deleteUsername() { + localStorage.removeItem(Cache.username); +} + +export function setUsername(username) { + localStorage.setItem(Cache.username, username); +} + +export function getUsername() { + return localStorage.getItem(Cache.username); +} + +// export function setEnableAuth(enable) { +// localStorage.setItem() +// } diff --git a/ui/src/views/Home.vue b/ui/src/views/Home.vue index 55eac8e..10b43dd 100644 --- a/ui/src/views/Home.vue +++ b/ui/src/views/Home.vue @@ -1,6 +1,6 @@