refactor: 修改权限规范.

This commit is contained in:
lijiahang
2023-12-27 15:09:23 +08:00
parent 6fdd29b3fe
commit fda6085cc8
18 changed files with 118 additions and 65 deletions

View File

@@ -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 />

View File

@@ -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 />

View File

@@ -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) {

View File

@@ -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();

View File

@@ -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>

View File

@@ -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');
}
},
];

View File

@@ -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>