fix(platform-admin): correct organization and contact display

This commit is contained in:
2026-08-08 14:48:07 +08:00
parent 20e3071789
commit 8e95a63503
7 changed files with 104 additions and 17 deletions

View File

@@ -135,13 +135,20 @@ func isCreatedResponseField(key string) bool {
}
func ProtectPreciseLocation(ctx *gin.Context, model, value any) any {
maskPersonalName := reflect.TypeOf(model) == reflect.TypeOf(&models.UserAccount{}) ||
reflect.TypeOf(model) == reflect.TypeOf(&models.StaffAccount{})
maskDisplayName := reflect.TypeOf(model) == reflect.TypeOf(&models.PlatformAccount{})
ProtectPublicFields(value, maskPersonalName, maskDisplayName, HasPreciseLocationScope(ctx))
retainPlatformPersonalData := canViewPlatformPersonalData(ctx)
maskPersonalName := !retainPlatformPersonalData && (reflect.TypeOf(model) == reflect.TypeOf(&models.UserAccount{}) ||
reflect.TypeOf(model) == reflect.TypeOf(&models.StaffAccount{}))
maskDisplayName := !retainPlatformPersonalData && reflect.TypeOf(model) == reflect.TypeOf(&models.PlatformAccount{})
protectPublicFields(value, maskPersonalName, maskDisplayName, HasPreciseLocationScope(ctx), retainPlatformPersonalData)
return value
}
// canViewPlatformPersonalData 仅允许已通过平台总后台鉴权和菜单校验的请求查看姓名与主手机号明文。
func canViewPlatformPersonalData(ctx *gin.Context) bool {
claims, err := middleware.ParseAuth(ctx)
return err == nil && claims.Client == "platform_admin"
}
var sensitiveResponseFields = map[string]bool{
"avatar": true, "address": true, "credential_no": true,
"evidence_uri": true, "evidence_url": true, "file_uri": true,
@@ -152,12 +159,18 @@ var sensitiveResponseFields = map[string]bool{
}
func ProtectPublicFields(value any, maskPersonalName, maskDisplayName, retainCoordinates bool) {
protectPublicFields(value, maskPersonalName, maskDisplayName, retainCoordinates, false)
}
func protectPublicFields(value any, maskPersonalName, maskDisplayName, retainCoordinates, retainPrimaryPhone bool) {
switch data := value.(type) {
case map[string]any:
if phone, ok := data["phone"].(string); ok && phone != "" {
data["phone_masked"] = MaskPhone(phone)
if !retainPrimaryPhone {
if phone, ok := data["phone"].(string); ok && phone != "" {
data["phone_masked"] = MaskPhone(phone)
}
delete(data, "phone")
}
delete(data, "phone")
for _, key := range []string{"contact_phone", "recipient_phone"} {
if phone, ok := data[key].(string); ok && phone != "" {
data[key+"_masked"] = MaskPhone(phone)
@@ -194,11 +207,11 @@ func ProtectPublicFields(value any, maskPersonalName, maskDisplayName, retainCoo
delete(data, "latitude")
}
for _, item := range data {
ProtectPublicFields(item, maskPersonalName, maskDisplayName, retainCoordinates)
protectPublicFields(item, maskPersonalName, maskDisplayName, retainCoordinates, retainPrimaryPhone)
}
case []any:
for _, item := range data {
ProtectPublicFields(item, maskPersonalName, maskDisplayName, retainCoordinates)
protectPublicFields(item, maskPersonalName, maskDisplayName, retainCoordinates, retainPrimaryPhone)
}
}
}