This commit is contained in:
2026-08-11 11:41:52 +08:00
parent de0a90e853
commit 6ab7d52a95
6 changed files with 65 additions and 16 deletions
+3 -14
View File
@@ -5,7 +5,7 @@ import { exchangeImpersonationCode, loginMerchant, logoutMerchant } from '@/modu
import { ApiError } from '@/api/http'
import {
FRONTEND_TO_MERCHANT_PERMISSION_CODES,
TENANT_PERMISSION_GROUPS,
hasMappedMerchantPermission,
getCurrentMerchantPermissionCodes,
getMerchantPersonalProfile,
getTenantProfile,
@@ -14,16 +14,6 @@ import {
import { clearSessionTokens, getAccessToken, getRefreshToken, persistTemporaryAccessToken, persistTokenPair } from '@/api/session'
import { decodeMerchantToken, type MerchantJwtPayload } from '@/modules/auth/utils/jwt'
const frontendPermissionCodes = new Set(TENANT_PERMISSION_GROUPS.flatMap((group) => group.items.map((item) => item.code)))
const backendPermissionMapping = Object.entries(FRONTEND_TO_MERCHANT_PERMISSION_CODES)
.reduce<Record<string, string[]>>((mapping, [frontendCode, backendCodes]) => {
for (const backendCode of backendCodes) {
if (!mapping[backendCode]) mapping[backendCode] = []
mapping[backendCode].push(frontendCode)
}
return mapping
}, {})
export interface ClientAccountProfile {
username: string
realName: string
@@ -43,9 +33,8 @@ const emptyProfile: ClientAccountProfile = {
function mapPermissions(backendPermissionCodes: string[] = []) {
const backendPermissions = new Set(backendPermissionCodes)
const result = new Set<string>(['dashboard:view', 'account:profile:view'])
for (const permission of backendPermissions) {
if (frontendPermissionCodes.has(permission)) result.add(permission)
for (const mapped of backendPermissionMapping[permission] ?? []) result.add(mapped)
for (const [frontendCode] of Object.entries(FRONTEND_TO_MERCHANT_PERMISSION_CODES)) {
if (hasMappedMerchantPermission(frontendCode, backendPermissions)) result.add(frontendCode)
}
return [...result]
}