refactor: 修改权限规范.
This commit is contained in:
@@ -44,7 +44,7 @@
|
||||
type="warning"
|
||||
@ok="doRefreshCache">
|
||||
<a-button type="primary" status="warning"
|
||||
v-permission="['infra:dict-key:refresh-cache']">
|
||||
v-permission="['infra:dict-key:management:refresh-cache']">
|
||||
刷新缓存
|
||||
<template #icon>
|
||||
<icon-sync />
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
type="warning"
|
||||
@ok="doRefreshCache">
|
||||
<a-button type="primary" status="warning"
|
||||
v-permission="['infra:system-menu:refresh-cache']">
|
||||
v-permission="['infra:system-menu:management:refresh-cache']">
|
||||
刷新缓存
|
||||
<template #icon>
|
||||
<icon-sync />
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<span>{{ item.address }}</span>
|
||||
<span>{{ item.location }}</span>
|
||||
<a-tag v-if="item.current" color="arcoblue">当前会话</a-tag>
|
||||
<a-button v-else-if="hasPermission('infra:system-user:offline-session')"
|
||||
<a-button v-else-if="!user || hasPermission('infra:system-user:management:offline-session')"
|
||||
style="font-weight: 600;"
|
||||
type="text"
|
||||
size="mini"
|
||||
@@ -76,7 +76,7 @@
|
||||
import { isMobile } from '@/utils/is';
|
||||
import { Message } from '@arco-design/web-vue';
|
||||
import usePermission from '@/hooks/permission';
|
||||
import { getUserSessionList } from '@/api/user/user';
|
||||
import { getUserSessionList, offlineUserSession } from '@/api/user/user';
|
||||
|
||||
const props = defineProps({
|
||||
user: Object as PropType<UserQueryResponse>,
|
||||
@@ -91,9 +91,18 @@
|
||||
const offline = async (item: UserSessionQueryResponse) => {
|
||||
try {
|
||||
setLoading(true);
|
||||
await offlineCurrentUserSession({
|
||||
timestamp: item.loginTime
|
||||
});
|
||||
if (props.user) {
|
||||
// 下线其他用户
|
||||
await offlineUserSession({
|
||||
userId: props.user?.id,
|
||||
timestamp: item.loginTime
|
||||
});
|
||||
} else {
|
||||
// 下线当前用户
|
||||
await offlineCurrentUserSession({
|
||||
timestamp: item.loginTime
|
||||
});
|
||||
}
|
||||
Message.success('操作成功');
|
||||
item.visible = false;
|
||||
} catch (e) {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</a-tab-pane>
|
||||
<!-- 登录日志 -->
|
||||
<a-tab-pane key="loginHistory"
|
||||
v-if="!user || hasPermission('infra:operator-log:query')"
|
||||
v-if="!user || hasPermission('infra:system-user:login-history')"
|
||||
title="登录日志">
|
||||
<login-history :user="user" />
|
||||
</a-tab-pane>
|
||||
@@ -48,8 +48,6 @@
|
||||
</script>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import UserBaseInfo from './components/user-base-info.vue';
|
||||
import LoginHistory from './components/login-history.vue';
|
||||
import UserSession from './components/user-session.vue';
|
||||
import OperatorLogList from './components/operator-log-list.vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
@@ -57,6 +55,8 @@
|
||||
import usePermission from '@/hooks/permission';
|
||||
import { useUserStore } from '@/store';
|
||||
import { getUser, UserQueryResponse } from '@/api/user/user';
|
||||
import UserBaseInfo from './components/user-base-info.vue';
|
||||
import LoginHistory from './components/login-history.vue';
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
title="分配菜单"
|
||||
width="80%"
|
||||
:top="40"
|
||||
:body-style="{padding: '16px 16px 0 16px', 'margin-bottom': '16px'}"
|
||||
:body-style="{ padding: '16px 16px 0 16px', 'margin-bottom': '16px' }"
|
||||
:align-center="false"
|
||||
:draggable="true"
|
||||
:mask-closable="false"
|
||||
@@ -22,18 +22,22 @@
|
||||
</a-alert>
|
||||
<div class="usn mb8">
|
||||
<a-space>
|
||||
<a-tag color="arcoblue">全选操作</a-tag>
|
||||
<!-- 全选操作 -->
|
||||
<template v-for="opt of quickGrantMenuOperator" :key="opt.name">
|
||||
<a-button size="mini" type="text" @click="() => { table.checkOrUncheckByRule(opt.rule, true) }">
|
||||
{{ '全选' + opt.name }}
|
||||
<a-button size="mini" type="text" @click="() => { table.checkOrUncheckByFilter(opt.filter, true) }">
|
||||
{{ opt.name }}
|
||||
</a-button>
|
||||
</template>
|
||||
</a-space>
|
||||
</div>
|
||||
<div class="usn mb8">
|
||||
<a-space>
|
||||
<a-tag color="arcoblue">反选操作</a-tag>
|
||||
<!-- 反选操作 -->
|
||||
<template v-for="opt of quickGrantMenuOperator" :key="opt.name">
|
||||
<a-button size="mini" type="text" @click="() => { table.checkOrUncheckByRule(opt.rule, false) }">
|
||||
{{ '反选' + opt.name }}
|
||||
<a-button size="mini" type="text" @click="() => { table.checkOrUncheckByFilter(opt.filter, false) }">
|
||||
{{ opt.name }}
|
||||
</a-button>
|
||||
</template>
|
||||
</a-space>
|
||||
@@ -124,5 +128,4 @@
|
||||
width: 100%;
|
||||
max-height: calc(100vh - 230px);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -17,47 +17,47 @@ const standardWrite = [...addType, ...updateType];
|
||||
// 快速分配菜单操作
|
||||
export const quickGrantMenuOperator = [
|
||||
{
|
||||
name: '',
|
||||
rule: undefined
|
||||
name: '全部',
|
||||
filter: undefined
|
||||
}, {
|
||||
name: '常规读操作',
|
||||
rule: (perm: string) => {
|
||||
name: '常规读',
|
||||
filter: (perm: string) => {
|
||||
return !!standardRead.find(s => perm.includes(s));
|
||||
}
|
||||
}, {
|
||||
name: '常规写操作',
|
||||
rule: (perm: string) => {
|
||||
name: '常规写',
|
||||
filter: (perm: string) => {
|
||||
return !!standardWrite.find(s => perm.includes(s));
|
||||
}
|
||||
}, {
|
||||
name: '查询',
|
||||
rule: (perm: string) => {
|
||||
filter: (perm: string) => {
|
||||
return !!queryType.find(s => perm.includes(s));
|
||||
}
|
||||
}, {
|
||||
name: '新增',
|
||||
rule: (perm: string) => {
|
||||
filter: (perm: string) => {
|
||||
return !!addType.find(s => perm.includes(s));
|
||||
}
|
||||
}, {
|
||||
name: '修改',
|
||||
rule: (perm: string) => {
|
||||
filter: (perm: string) => {
|
||||
return !!updateType.find(s => perm.includes(s));
|
||||
}
|
||||
}, {
|
||||
name: '删除',
|
||||
rule: (perm: string) => {
|
||||
filter: (perm: string) => {
|
||||
return !!deleteType.find(s => perm.includes(s));
|
||||
}
|
||||
}, {
|
||||
name: '导入',
|
||||
rule: (perm: string) => {
|
||||
return perm.includes('import');
|
||||
name: '管理',
|
||||
filter: (perm: string) => {
|
||||
return perm.includes('management');
|
||||
}
|
||||
}, {
|
||||
name: '导出',
|
||||
rule: (perm: string) => {
|
||||
return perm.includes('export');
|
||||
name: '授权',
|
||||
filter: (perm: string) => {
|
||||
return perm.includes('grant');
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
<a-button type="text"
|
||||
size="mini"
|
||||
:disabled="record.id === userStore.id"
|
||||
v-permission="['infra:system-user:reset-password']"
|
||||
v-permission="['infra:system-user:management:reset-password']"
|
||||
@click="emits('openResetPassword', record)">
|
||||
重置密码
|
||||
</a-button>
|
||||
|
||||
Reference in New Issue
Block a user