/** * * 返回一个权限集合。 * /test/per */ @RequestMapping("/per") public R per(){ Map<String,Object> map=new HashMap<>(); List<String> perList = new ArrayList<>(); perList.add("user:edit"); map.put("perList",perList); return R.ok(map); }
const handleLogin = ()=>{ loginRef.value.validate(async(valid)=>{ if(valid){ // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码 30天,单位是天。 if (loginForm.value.rememberMe) { Cookies.set("username", loginForm.value.username, { expires: 30 }); Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 }); Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 }); } else { // 否则移除 Cookies.remove("username"); Cookies.remove("password"); Cookies.remove("rememberMe"); } // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码 //requestUtil.post("login?"+qs.stringify(loginForm.value)) let result=await requestUtil.post("login?username="+loginForm.value.username+"&password="+loginForm.value.password) let data=result.data; if(data.code==200){ const token=data.authorization; const menuList = data.menuList; const currentUser=data.currentUser; console.log("登录成功,接受到的token是:"+token) //sessionStorage.setItem('token',token); store.commit('SET_TOKEN',token); store.commit('SET_MENULIST',menuList); store.commit('SET_USERINFO',currentUser); store.commit('SET_PERLIST',data.perList); router.replace("/index");//跳转到 首页。 }else{ ElMessage.error(data.msg) } }else{ console.log("验证失败") } }) } 后台代码。
// usePermissions.js import { ref, computed } from 'vue'; export function usePermissions(permissions = []) { const userPermissions = ref(permissions); // 提供一个方法来更新用户权限(可选) 接受数组 function updatePermissions(newPermissions) { userPermissions.value = newPermissions; } // 但是,由于 computed 不能直接作为函数传递参数(它会返回一个响应式对象), // 我们需要稍微改变一下策略,返回一个函数来检查权限。 function checkPermission(permission) { return userPermissions.value.includes(permission); } // 返回更新权限的方法和检查权限的函数 return { updatePermissions, checkPermission, }; } // 注意:上面的 hasPermission 计算属性方法在这里不适用,因为我们需要一个直接返回布尔值的函数。 // 因此,我们使用了 checkPermission 函数来代替。
<template> <div> <el-button v-if="permissions.checkPermission('user:add')">add</el-button> <el-button v-if="permissions.checkPermission('user:edit')" type="primary">edit</el-button> <el-button v-if="permissions.checkPermission('user:list')" type="success">list</el-button> </div> </template> <script setup> import requestUtil from "@/util/request"; import store from '@/store' import {ref, onMounted,nextTick , onBeforeMount, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted} from 'vue' import {ElMessage} from 'element-plus' import router from '@/router' import Cookies from "js-cookie"; import { encrypt, decrypt } from "@/util/jsencrypt"; import {Check, Delete, Edit, Message, Search, Star,} from '@element-plus/icons-vue' import { usePermissions } from '@/util/usePermissions'; // 假设 usePermissions.js 在同一目录下 // 假设这是从某个 API 获取的用户权限(这里使用 ref 来模拟异步获取) const initialPermissions = ref([]); // 使用 usePermissions 钩子来获取权限检查功能 const permissions = usePermissions(initialPermissions.value); const getInfi=async()=>{ const res=await requestUtil.get("test/per"); console.log("获取的权限",res); console.log("获取的权限",res.data.code); console.log("获取的权限",res.data.perList); permissions.updatePermissions(res.data.perList); // 更新权限 } // 在组件挂载完成后调用 onMounted(() => { console.log('mounted'); getInfi(); }); </script> <style scoped> div{ padding: 25px; } </style>
import { usePermissions } from '@/util/usePermissions'; import store from "@/store"; const token = ref(store.getters.GET_TOKEN); // 假设这是从某个 API 获取的用户权限(这里使用 ref 来模拟异步获取) const initialPermissions =ref(store.getters.GET_PERLIST); // 使用 usePermissions 钩子来获取权限检查功能 const permissions = usePermissions(initialPermissions.value);
scope(scope..).()(scope..)
站长微信:xiaomao0055
站长QQ:14496453