添加用户权限查询功能,解码JWT以获取用户ID,并根据权限更新用户权限状态
This commit is contained in:
parent
08dfb27ac9
commit
78b6416e15
@ -11,7 +11,7 @@
|
|||||||
刷新
|
刷新
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-dialog v-model="dialog0" max-width="500px">
|
<v-dialog v-model="dialog0" max-width="500px">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-if="userPermission == '1'" v-slot:activator="{ props }">
|
||||||
<v-btn class="mb-2" color="primary" dark v-bind="props">
|
<v-btn class="mb-2" color="primary" dark v-bind="props">
|
||||||
新建题目
|
新建题目
|
||||||
</v-btn>
|
</v-btn>
|
||||||
@ -124,6 +124,7 @@ import { useAuthStore } from '@/store/auth';
|
|||||||
import axios, { Axios, AxiosError } from 'axios';
|
import axios, { Axios, AxiosError } from 'axios';
|
||||||
import { computed, nextTick, onMounted, ref, watch } from 'vue';
|
import { computed, nextTick, onMounted, ref, watch } from 'vue';
|
||||||
import * as mathjs from 'mathjs';
|
import * as mathjs from 'mathjs';
|
||||||
|
import { jwtDecode, type JwtPayload } from 'jwt-decode';
|
||||||
|
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const refresh = async () => {
|
const refresh = async () => {
|
||||||
@ -278,6 +279,45 @@ watch(dialogDelete, (val) => {
|
|||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
const storedToken = ref(authStore.token);
|
const storedToken = ref(authStore.token);
|
||||||
|
|
||||||
|
interface KqmJwt extends JwtPayload {
|
||||||
|
user_id: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const userId = computed(() => {
|
||||||
|
if (storedToken.value != '') {
|
||||||
|
let data: KqmJwt = jwtDecode(storedToken.value);
|
||||||
|
return data.user_id;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
type UserPermissionResponse = { success?: string, permission?: string, error?: string };
|
||||||
|
|
||||||
|
const queryPermission = async () => {
|
||||||
|
try {
|
||||||
|
const formData = new FormData;
|
||||||
|
formData.append("user_id", userId.value);
|
||||||
|
let res = await axios.post('/api/auth/permission', formData);
|
||||||
|
return res.data as UserPermissionResponse;
|
||||||
|
} catch (e) {
|
||||||
|
let ex = e as AxiosError;
|
||||||
|
return ex.response?.data as UserPermissionResponse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const userPermission = ref('');
|
||||||
|
|
||||||
|
const updateUserPermission = async () => {
|
||||||
|
let res = await queryPermission();
|
||||||
|
if (res?.success) {
|
||||||
|
userPermission.value = res.permission as string;
|
||||||
|
} else {
|
||||||
|
userPermission.value = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(userId, updateUserPermission, { immediate: true });
|
||||||
|
|
||||||
const decorate = <T>(ex: AxiosError) => {
|
const decorate = <T>(ex: AxiosError) => {
|
||||||
if (ex.response?.data) {
|
if (ex.response?.data) {
|
||||||
return ex.response?.data as T;
|
return ex.response?.data as T;
|
||||||
|
Loading…
Reference in New Issue
Block a user