refactor permission

This commit is contained in:
Timi
2026-08-11 15:24:29 +08:00
parent 45ea8b46aa
commit 575d41b2e2
20 changed files with 1789 additions and 625 deletions
+12 -35
View File
@@ -7,25 +7,18 @@ function buildRoleCode(role: Role): string {
return role.moduleCode && !role.code.includes(":") ? `${role.moduleCode}:${role.code}` : role.code;
}
function getBareRoleCode(code: string): string {
const codePartList = code.split(":");
return codePartList[codePartList.length - 1] || code;
}
function findRole(role: ManagedUserRole, roleList: Role[]): Role | undefined {
if (typeof role === "string") {
return roleList.find(roleItem => roleItem.code === role || buildRoleCode(roleItem) === role);
return roleList.find(roleItem => buildRoleCode(roleItem) === role);
}
return roleList.find(roleItem => roleItem.id === role.id || roleItem.code === role.code || buildRoleCode(roleItem) === role.code);
return roleList.find(roleItem => roleItem.id === role.id || buildRoleCode(roleItem) === buildRoleCode(role as Role));
}
function appendCompatibleRoleCode(roleCodeSet: Set<string>, code: string): void {
if (!code) {
return;
export function getManagedUserRoleList(user: ManagedUser): ManagedUserRole[] {
if (user.user?.roleEntityList?.length) {
return user.user.roleEntityList;
}
roleCodeSet.add(code);
roleCodeSet.add(getBareRoleCode(code));
return user.roleList || user.user?.roleList || [];
}
export function getRoleDisplayName(role: ManagedUserRole | undefined, roleList: Role[]): string {
@@ -38,34 +31,18 @@ export function getRoleDisplayName(role: ManagedUserRole | undefined, roleList:
return fullRole.name || fullRole.code || "未配置角色";
}
return typeof role === "string" ? getBareRoleCode(role) : role.name || role.code || "未配置角色";
return typeof role === "string" ? role : role.name || role.code || "未配置角色";
}
export function buildEffectiveRoleCodeSet(user: ManagedUser, roleList: Role[]): Set<string> {
export function buildEffectiveRoleCodeSet(user: ManagedUser): Set<string> {
const roleCodeSet = new Set<string>();
for (const role of user.roleList || []) {
const fullRole = findRole(role, roleList);
if (fullRole) {
appendRoleCode(roleCodeSet, fullRole, roleList, new Set<string>());
for (const role of getManagedUserRoleList(user)) {
if (typeof role !== "string") {
roleCodeSet.add(buildRoleCode(role as Role));
continue;
}
appendCompatibleRoleCode(roleCodeSet, typeof role === "string" ? role : role.code);
roleCodeSet.add(role);
}
return roleCodeSet;
}
function appendRoleCode(roleCodeSet: Set<string>, role: Role, roleList: Role[], visitedRoleIds: Set<string>): void {
if (!role.id || visitedRoleIds.has(role.id)) {
return;
}
visitedRoleIds.add(role.id);
appendCompatibleRoleCode(roleCodeSet, buildRoleCode(role));
for (const childRoleId of role.childRoleIdList) {
const childRole = roleList.find(item => item.id === childRoleId);
if (childRole) {
appendRoleCode(roleCodeSet, childRole, roleList, visitedRoleIds);
}
}
}