This commit is contained in:
2026-08-04 10:31:53 +08:00
parent 198101c42c
commit 5c25806081
10 changed files with 100 additions and 31 deletions
@@ -22,6 +22,7 @@ import {
} from '@/modules/tenant-management/api/merchantIam'
import {
FRONTEND_TO_MERCHANT_PERMISSION_CODES,
REQUIRED_TENANT_PERMISSION_CODES,
TENANT_PERMISSION_GROUPS,
type MerchantTenantStatus,
} from '@/modules/tenant-management/contracts'
@@ -131,6 +132,7 @@ export const useTenantAdministrationStore = defineStore('tenant-administration',
const permissionCodes = Object.entries(FRONTEND_TO_MERCHANT_PERMISSION_CODES)
.filter(([, backendCodes]) => backendCodes.some((code) => grantedBackendCodes.has(code)))
.map(([frontendCode]) => frontendCode)
const effectivePermissionCodes = [...new Set([...REQUIRED_TENANT_PERMISSION_CODES, ...permissionCodes])]
return {
id: String(role.id),
name: role.roleName,
@@ -139,7 +141,7 @@ export const useTenantAdministrationStore = defineStore('tenant-administration',
status: role.status === 'ACTIVE' ? 'ACTIVE' : 'INACTIVE',
builtin: role.roleType === 'SYSTEM',
permissionIds: grantedIds,
permissionCodes: role.roleType === 'SYSTEM' && role.roleCode === 'MERCHANT_OWNER' ? [...allPermissionCodes] : permissionCodes,
permissionCodes: role.roleType === 'SYSTEM' && role.roleCode === 'MERCHANT_OWNER' ? [...allPermissionCodes] : effectivePermissionCodes,
}
}
@@ -265,7 +267,8 @@ export const useTenantAdministrationStore = defineStore('tenant-administration',
const role = roles.value.find((item) => item.id === id)
if (!role) throw new Error('角色不存在')
if (role.builtin) throw new Error('内置管理员权限不能修改')
const backendCodes = new Set(permissionCodes.flatMap((code) => FRONTEND_TO_MERCHANT_PERMISSION_CODES[code] ?? []))
const effectivePermissionCodes = [...new Set([...REQUIRED_TENANT_PERMISSION_CODES, ...permissionCodes])]
const backendCodes = new Set(effectivePermissionCodes.flatMap((code) => FRONTEND_TO_MERCHANT_PERMISSION_CODES[code] ?? []))
const selectedPermissionIds = permissionResources.value
.filter((resource) => backendCodes.has(resource.permissionCode))
.map((resource) => resource.id)
@@ -277,7 +280,7 @@ export const useTenantAdministrationStore = defineStore('tenant-administration',
const nextPermissionIds = [...new Set([...preservedPermissionIds, ...selectedPermissionIds])]
await replaceMerchantRolePermissions(id, nextPermissionIds)
role.permissionIds = nextPermissionIds.map(String)
role.permissionCodes = [...new Set(permissionCodes)]
role.permissionCodes = effectivePermissionCodes
}
function roleMemberCount(roleId: string) {