权限配置.
This commit is contained in:
@@ -50,6 +50,6 @@ cron:
|
||||
|
||||
# 权限认证设置,设置为true,需要先登录才能访问
|
||||
auth:
|
||||
enable: true
|
||||
enable: false
|
||||
# 登录用户token的过期时间,单位:小时
|
||||
expire-hours: 24
|
||||
@@ -2,4 +2,71 @@
|
||||
--
|
||||
-- INSERT INTO t_kafka_user (id, username, password) VALUES
|
||||
-- (1, 'Jone', 'p1'),
|
||||
-- (2, 'Jack', 'p2');
|
||||
-- (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');
|
||||
|
||||
@@ -19,7 +19,23 @@
|
||||
><router-link to="/user-page" class="pad-l-r">用户</router-link>
|
||||
<span>|</span
|
||||
><router-link to="/op-page" class="pad-l-r">运维</router-link>
|
||||
<span class="right">集群:{{ clusterName }}</span>
|
||||
<div class="right">
|
||||
<span>集群:{{ clusterName }} </span>
|
||||
<a-dropdown v-show="showUsername">
|
||||
<span>
|
||||
<span> | </span><a-icon type="smile"></a-icon>
|
||||
<span>{{ username }}</span>
|
||||
</span>
|
||||
<a-menu slot="overlay">
|
||||
<a-menu-item key="1">
|
||||
<a href="javascript:;" @click="logout">
|
||||
<!-- <a-icon type="logout"/>-->
|
||||
<span>退出</span>
|
||||
</a>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</a-dropdown>
|
||||
</div>
|
||||
</div>
|
||||
<router-view class="content" />
|
||||
</div>
|
||||
@@ -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();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
13
ui/src/directives/action.js
Normal file
13
ui/src/directives/action.js
Normal file
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
@@ -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: {},
|
||||
|
||||
@@ -4,5 +4,6 @@ export const CLUSTER = {
|
||||
|
||||
export const AUTH = {
|
||||
ENABLE: "enable",
|
||||
SET: "setToken",
|
||||
SET_TOKEN: "setToken",
|
||||
SET_USERNAME: "setUsername",
|
||||
};
|
||||
|
||||
@@ -4,4 +4,8 @@ export const ConstantEvent = {
|
||||
|
||||
export const Cache = {
|
||||
clusterInfo: "clusterInfo",
|
||||
auth: "auth",
|
||||
token: "access_token",
|
||||
username: "login_user",
|
||||
enableAuth: "enable_auth",
|
||||
};
|
||||
|
||||
@@ -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()
|
||||
// }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="home">
|
||||
<a-card title="控制台默认配置" class="card-style">
|
||||
<a-card v-action:action title="控制台默认配置" class="card-style">
|
||||
<p v-for="(v, k) in config" :key="k">{{ k }}={{ v }}</p>
|
||||
</a-card>
|
||||
<p></p>
|
||||
|
||||
@@ -65,6 +65,7 @@ export default {
|
||||
this.loading = false;
|
||||
if (res.code == 0) {
|
||||
this.setToken(res.data.token);
|
||||
this.setUsername(params.username);
|
||||
this.$router.push("/");
|
||||
} else {
|
||||
notification.error({
|
||||
@@ -77,7 +78,8 @@ export default {
|
||||
});
|
||||
},
|
||||
...mapMutations({
|
||||
setToken: AUTH.SET,
|
||||
setToken: AUTH.SET_TOKEN,
|
||||
setUsername: AUTH.SET_USERNAME,
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
</a-form>
|
||||
</div>
|
||||
<div class="operation-row-button">
|
||||
<a-button type="primary" @click="openCreateTopicDialog"
|
||||
<a-button type="primary" @click="openCreateTopicDialog" v-action:action
|
||||
>新增</a-button
|
||||
>
|
||||
<a-popconfirm
|
||||
@@ -60,6 +60,7 @@
|
||||
class="btn-left"
|
||||
:disabled="!hasSelected"
|
||||
:loading="loading"
|
||||
v-action:action
|
||||
>
|
||||
批量删除
|
||||
</a-button>
|
||||
|
||||
@@ -204,6 +204,18 @@ export default {
|
||||
.filter((id) => idSet.has(id));
|
||||
btn.selected = selected || [];
|
||||
btn.selectAll = btn.selected.length == btn.children.length;
|
||||
} else {
|
||||
const self = Object.assign({}, btn);
|
||||
self.name = btn.name;
|
||||
self.label = btn.name;
|
||||
self.value = btn.id;
|
||||
const btnArr = [self];
|
||||
btn.children = btnArr;
|
||||
const selected = btn.children
|
||||
.map((bc) => bc.id)
|
||||
.filter((id) => idSet.has(id));
|
||||
btn.selected = selected || [];
|
||||
btn.selectAll = btn.selected.length == btn.children.length;
|
||||
}
|
||||
});
|
||||
menu.children = arr;
|
||||
|
||||
Reference in New Issue
Block a user