feat: remove permission management page and enhance role/user management features

This commit is contained in:
Ray.Hao
2026-03-08 07:43:57 +08:00
parent fcff0cbd67
commit c9c66e4239
26 changed files with 2843 additions and 211 deletions

View File

@@ -65,11 +65,10 @@ export function clearTokens(): void {
* @returns 返回用户是否已登录
*/
export function checkLogin(silent: boolean = false): boolean {
const userStore = useUserStore();
const accessToken = getAccessToken();
// 检查 token 和用户信息是否存在
const isLoggedIn = !!(accessToken && userStore.userInfo);
// 检查 token 是否存在
const isLoggedIn = !!accessToken;
if (!isLoggedIn && !silent) {
try {
@@ -119,7 +118,7 @@ export function checkLogin(silent: boolean = false): boolean {
* @returns 返回用户是否已登录
*/
export function isLoggedIn(): boolean {
return checkLogin(true);
return !!getAccessToken();
}
/**

155
src/utils/permission.ts Normal file
View File

@@ -0,0 +1,155 @@
import { useUserStore } from "@/store";
import { ROLE_ROOT, PERM_ALL } from "@/constants";
/**
* 检查是否拥有指定权限
*
* @param permission 权限标识,支持字符串或字符串数组(满足其一即可)
* @returns 是否拥有权限
*
* @example
* hasPermission('sys:user:create') // 检查单个权限
* hasPermission(['sys:user:create', 'sys:user:update']) // 满足其一即可
*/
export function hasPermission(permission: string | string[]): boolean {
// 参数校验
if (!permission) {
console.warn("[Permission] 需要提供权限标识");
return false;
}
// 标准化为数组
const permissions = Array.isArray(permission) ? permission : [permission];
// 空数组校验
if (permissions.length === 0) {
console.warn("[Permission] 权限标识数组不能为空");
return false;
}
const userStore = useUserStore();
const userInfo = userStore.userInfo;
// 未登录或无用户信息
if (!userInfo) {
return false;
}
const { roles = [], perms = [] } = userInfo;
// 超级管理员拥有所有权限
if (roles.includes(ROLE_ROOT)) {
return true;
}
// 检查是否包含全部权限标识
if (permissions.includes(PERM_ALL)) {
return true;
}
// 检查权限:满足其一即可
return permissions.some((perm) => perms.includes(perm));
}
/**
* 检查是否拥有指定角色
*
* @param role 角色标识,支持字符串或字符串数组(满足其一即可)
* @returns 是否拥有角色
*
* @example
* hasRole('ADMIN') // 检查单个角色
* hasRole(['ADMIN', 'TEST']) // 满足其一即可
*/
export function hasRole(role: string | string[]): boolean {
// 参数校验
if (!role) {
console.warn("[Permission] 需要提供角色标识");
return false;
}
// 标准化为数组
const roles = Array.isArray(role) ? role : [role];
// 空数组校验
if (roles.length === 0) {
console.warn("[Permission] 角色标识数组不能为空");
return false;
}
const userStore = useUserStore();
const userInfo = userStore.userInfo;
// 未登录或无用户信息
if (!userInfo) {
return false;
}
const userRoles = userInfo.roles || [];
// 超级管理员拥有所有角色
if (userRoles.includes(ROLE_ROOT)) {
return true;
}
// 检查角色:满足其一即可
return roles.some((r) => userRoles.includes(r));
}
/**
* 检查是否拥有所有指定权限(且关系)
*
* @param permissions 权限标识数组
* @returns 是否拥有所有权限
*/
export function hasAllPermissions(permissions: string[]): boolean {
if (!permissions || permissions.length === 0) {
return false;
}
const userStore = useUserStore();
const userInfo = userStore.userInfo;
if (!userInfo) {
return false;
}
const { roles = [], perms = [] } = userInfo;
// 超级管理员拥有所有权限
if (roles.includes(ROLE_ROOT)) {
return true;
}
// 检查权限:必须全部满足
return permissions.every((perm) => perms.includes(perm));
}
/**
* 检查是否拥有所有指定角色(且关系)
*
* @param roles 角色标识数组
* @returns 是否拥有所有角色
*/
export function hasAllRoles(roles: string[]): boolean {
if (!roles || roles.length === 0) {
return false;
}
const userStore = useUserStore();
const userInfo = userStore.userInfo;
if (!userInfo) {
return false;
}
const userRoles = userInfo.roles || [];
// 超级管理员拥有所有角色
if (userRoles.includes(ROLE_ROOT)) {
return true;
}
// 检查角色:必须全部满足
return roles.every((role) => userRoles.includes(role));
}