权限
初始化权限
当登录成功或刷新页面后,会请求/api/user/info接口获取权限,相关代码在@/store/modules/user.ts中,rules值为用户具有的权限数组,格式为string[]。
// 初始化
init: async function (tokenValue?: string) {
const token = tokenValue ?? cookies.get(config.tokenName);
if (token) {
this.token = token;
this.user = await userInfoApi(true)();
this.rules = this.user.rules;
useRouteStore()
.generateRoutes()
.forEach((route) => router.addRoute(route));
} else {
this.token = '';
}
},
路由权限校验
初始化完权限后,根据获取到的权限动态过滤asyncRoutes,并注册过滤后的路由,过滤规则参考路由权限
按钮权限校验
权限校验函数为permission(rules?: string | string[]),当入参为数组时,匹配成功数组中的任意一个权限则返回true。
通过v-if指令和permission函数配合进行按钮权限校验(未进行封装指令的原因是,指令方式对服务端渲染不友好,建议使用v-if判断)。
- 通过全局函数$permission()校验权限
<el-button v-if="$permission('edit')">{{ $t('编辑') }}</el-button>
- 引入 permission()函数校验
<template>
<div class="permission">
<el-button v-if="permission('show')">{{ $t('查看') }}</el-button>
</div>
</template>
<script setup lang="ts" name="permission">
import { permission } from '@/utils/permission';
</script>
超管权限
当初始化权限时拿到的rules数组包含'*'时,代表具有所有权限,权限permission函数会必定返回true