fix(api): 调整权限合并逻辑以支持plan_id_eq和reseller_id_eq过滤

- 在marketing数据源且主资源为order或order_info时
- 若filters包含非空的plan_id_eq或reseller_id_eq,则跳过creator过滤
- 优化了对权限中多个可能user id字段的检测逻辑
- 统一将识别到的用户ID写入filters的creator_in字段
- 保留了对reseller_id和merchant_id的兼容处理逻辑
This commit is contained in:
zhouyonggao 2025-12-18 23:26:09 +08:00
parent 5608897284
commit dd559f2f78
1 changed files with 31 additions and 19 deletions

View File

@ -1559,35 +1559,47 @@ func mergePermissionIntoFilters(ds, main string, perm map[string]interface{}, fi
if hasNonEmptyIDs(filters["creator_in"]) { if hasNonEmptyIDs(filters["creator_in"]) {
return filters return filters
} }
// try known keys // 如果传递了 plan_id_eq 或 reseller_id_eq 且不为空,则不再过滤 creator
candidates := []string{"creator_in", "creator_ids", "user_ids", "user_id_in", "user_id", "owner_id"} if ds == "marketing" && (main == "order" || main == "order_info") {
ids := []interface{}{} if v, ok := filters["plan_id_eq"]; ok && v != nil && v != "" && v != 0 {
for _, k := range candidates { goto skipCreator
if perm == nil {
break
} }
if v, ok := perm[k]; ok { if v, ok := filters["reseller_id_eq"]; ok && v != nil && v != "" && v != 0 {
ids = normalizeIDs(v) goto skipCreator
if len(ids) > 0 {
break
}
} }
} }
// also check filters incoming alternative keys and normalize into creator_in // try known keys
if len(ids) == 0 { {
alt := []string{"creator_ids", "user_ids", "user_id_in", "user_id", "owner_id"} candidates := []string{"creator_in", "creator_ids", "user_ids", "user_id_in", "user_id", "owner_id"}
for _, k := range alt { ids := []interface{}{}
if v, ok := filters[k]; ok { for _, k := range candidates {
if perm == nil {
break
}
if v, ok := perm[k]; ok {
ids = normalizeIDs(v) ids = normalizeIDs(v)
if len(ids) > 0 { if len(ids) > 0 {
break break
} }
} }
} }
// also check filters incoming alternative keys and normalize into creator_in
if len(ids) == 0 {
alt := []string{"creator_ids", "user_ids", "user_id_in", "user_id", "owner_id"}
for _, k := range alt {
if v, ok := filters[k]; ok {
ids = normalizeIDs(v)
if len(ids) > 0 {
break
}
}
}
}
if len(ids) > 0 {
filters["creator_in"] = ids
}
} }
if len(ids) > 0 { skipCreator:
filters["creator_in"] = ids
}
// map alternative permission boundaries to supported filters // map alternative permission boundaries to supported filters
// reseller/merchant -> reseller_id_eq // reseller/merchant -> reseller_id_eq
if v, ok := pickFirst(perm, filters, []string{"reseller_id", "merchant_id"}); ok { if v, ok := pickFirst(perm, filters, []string{"reseller_id", "merchant_id"}); ok {