添加用户权限查询功能,解码JWT以获取用户ID,并根据权限更新用户权限状态
This commit is contained in:
		
							parent
							
								
									08dfb27ac9
								
							
						
					
					
						commit
						78b6416e15
					
				@ -11,7 +11,7 @@
 | 
			
		||||
          刷新
 | 
			
		||||
        </v-btn>
 | 
			
		||||
        <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>
 | 
			
		||||
@ -124,6 +124,7 @@ import { useAuthStore } from '@/store/auth';
 | 
			
		||||
import axios, { Axios, AxiosError } from 'axios';
 | 
			
		||||
import { computed, nextTick, onMounted, ref, watch } from 'vue';
 | 
			
		||||
import * as mathjs from 'mathjs';
 | 
			
		||||
import { jwtDecode, type JwtPayload } from 'jwt-decode';
 | 
			
		||||
 | 
			
		||||
const loading = ref(false);
 | 
			
		||||
const refresh = async () => {
 | 
			
		||||
@ -278,6 +279,45 @@ watch(dialogDelete, (val) => {
 | 
			
		||||
const authStore = useAuthStore();
 | 
			
		||||
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) => {
 | 
			
		||||
  if (ex.response?.data) {
 | 
			
		||||
    return ex.response?.data as T;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user