refactor permission
This commit is contained in:
+29
-15
@@ -58,10 +58,10 @@ export const corePermissionCodes = {
|
||||
read: "CORE:ROLE_PERMISSION:READ",
|
||||
delete: "CORE:ROLE_PERMISSION:DELETE"
|
||||
},
|
||||
roleRelation: {
|
||||
create: "CORE:ROLE_RELATION:CREATE",
|
||||
read: "CORE:ROLE_RELATION:READ",
|
||||
delete: "CORE:ROLE_RELATION:DELETE"
|
||||
rolePermissionInherit: {
|
||||
create: "CORE:ROLE_PERMISSION_INHERIT:CREATE",
|
||||
read: "CORE:ROLE_PERMISSION_INHERIT:READ",
|
||||
delete: "CORE:ROLE_PERMISSION_INHERIT:DELETE"
|
||||
},
|
||||
userRole: {
|
||||
create: "CORE:USER_ROLE:CREATE",
|
||||
@@ -71,23 +71,37 @@ export const corePermissionCodes = {
|
||||
} as const;
|
||||
|
||||
export const coreRoleCodes = {
|
||||
admin: "CORE:ADMIN",
|
||||
userRoleAdmin: "CORE:USER_ROLE_ADMIN"
|
||||
admin: "CORE:ADMIN"
|
||||
} as const;
|
||||
|
||||
export const gaoRoleCodes = {
|
||||
globalManager: "GAO:GLOBAL_MANAGER",
|
||||
storeManager: "GAO:STORE_MANAGER",
|
||||
employee: "GAO:EMPLOYEE"
|
||||
storeManager: "GAO:STORE_MANAGER"
|
||||
} as const;
|
||||
|
||||
export const permissionManagementRoleAccess = {
|
||||
value: [
|
||||
coreRoleCodes.admin,
|
||||
coreRoleCodes.userRoleAdmin
|
||||
],
|
||||
mode: "or"
|
||||
} as const;
|
||||
/** 需要读取登录用户所属门店的业务权限。 */
|
||||
export const gaoStoreScopePermissionCodes = [
|
||||
permissionCodes.customer.create,
|
||||
permissionCodes.customer.read,
|
||||
permissionCodes.customer.export,
|
||||
permissionCodes.customer.update,
|
||||
permissionCodes.customer.delete,
|
||||
permissionCodes.event.create,
|
||||
permissionCodes.event.read,
|
||||
permissionCodes.event.update,
|
||||
permissionCodes.event.delete,
|
||||
permissionCodes.eventRecord.create,
|
||||
permissionCodes.eventRecord.read,
|
||||
permissionCodes.eventRecord.export,
|
||||
permissionCodes.eventRecord.update,
|
||||
permissionCodes.eventRecord.delete,
|
||||
permissionCodes.stat.read,
|
||||
permissionCodes.user.create,
|
||||
permissionCodes.user.read,
|
||||
permissionCodes.user.update,
|
||||
permissionCodes.user.delete,
|
||||
permissionCodes.qrCode.create
|
||||
];
|
||||
|
||||
export type PermissionCodes = typeof permissionCodes;
|
||||
export type CorePermissionCodes = typeof corePermissionCodes;
|
||||
|
||||
+12
-35
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user