Files
gao-customer-h5/src/utils/role.ts
T
2026-08-11 15:24:29 +08:00

49 lines
1.5 KiB
TypeScript

import type { Role } from "@/store/permissionSettingsStore";
import type { ManagedUser } from "@/types/ManagedUser";
type ManagedUserRole = NonNullable<ManagedUser["roleList"]>[number];
function buildRoleCode(role: Role): string {
return role.moduleCode && !role.code.includes(":") ? `${role.moduleCode}:${role.code}` : role.code;
}
function findRole(role: ManagedUserRole, roleList: Role[]): Role | undefined {
if (typeof role === "string") {
return roleList.find(roleItem => buildRoleCode(roleItem) === role);
}
return roleList.find(roleItem => roleItem.id === role.id || buildRoleCode(roleItem) === buildRoleCode(role as Role));
}
export function getManagedUserRoleList(user: ManagedUser): ManagedUserRole[] {
if (user.user?.roleEntityList?.length) {
return user.user.roleEntityList;
}
return user.roleList || user.user?.roleList || [];
}
export function getRoleDisplayName(role: ManagedUserRole | undefined, roleList: Role[]): string {
if (!role) {
return "未配置角色";
}
const fullRole = findRole(role, roleList);
if (fullRole) {
return fullRole.name || fullRole.code || "未配置角色";
}
return typeof role === "string" ? role : role.name || role.code || "未配置角色";
}
export function buildEffectiveRoleCodeSet(user: ManagedUser): Set<string> {
const roleCodeSet = new Set<string>();
for (const role of getManagedUserRoleList(user)) {
if (typeof role !== "string") {
roleCodeSet.add(buildRoleCode(role as Role));
continue;
}
roleCodeSet.add(role);
}
return roleCodeSet;
}