feat(access): 实现基于用户角色的路由权限控制

添加权限检查功能,包括用户角色定义、路由元信息扩展和权限验证逻辑
重构路由配置和用户存储,支持动态菜单过滤
更新构建配置以支持类型声明生成
This commit is contained in:
2025-11-15 20:11:05 +08:00
parent a98eae385f
commit 8aa1f313af
10 changed files with 144 additions and 24 deletions

37
src/access/checkAccess.ts Normal file
View File

@@ -0,0 +1,37 @@
import type { LoginUesr } from "../store/types";
import ACCESS_ENUM from "./accessEnum";
/**
* 检查当前用户是否拥有权限
* @param loginUser 登录的用户信息
* @param needAccess 需要的权限
* @returns {boolean}
*/
const checkAccess = (
loginUser: LoginUesr,
needAccess = ACCESS_ENUM.NOT_LOGIN
): boolean => {
// 获取当前登录用户具有的权限
const loginUserAccess = loginUser?.userRole ?? ACCESS_ENUM.NOT_LOGIN;
// 对比权限是否足够
// 如果需要的权限是随便是个人都能访问
if (needAccess === ACCESS_ENUM.NOT_LOGIN) {
return true;
}
// 如果用户登录才能访问
if (needAccess === ACCESS_ENUM.USER) {
if (loginUserAccess !== ACCESS_ENUM.NOT_LOGIN) {
return false;
}
}
// 如果需要管理员权限
if (needAccess === ACCESS_ENUM.ADMIN) {
// 如果不为管理员
if (loginUserAccess !== ACCESS_ENUM.ADMIN) {
return false;
}
}
// 如果说啥都不符合,那还说啥了,直接拒了
return false;
};
export default checkAccess;

6
src/access/index.ts Normal file
View File

@@ -0,0 +1,6 @@
import router from "../router/router";
import { useUserStore } from "../store/user";
import ACCESS_ENUM from "./accessEnum";
import checkAccess from "./checkAccess";