fix(logs): 「所有人」策略组无法新建(被误判为已属于其他策略组)

现象:userIds:[0] 新建策略组时报
  「用户 0 已属于此数据源的另一个策略组」HTTP 400

根因:validatePolicyGroup 的跨组冲突检查把 EveryoneUserID(0) 当真实用户,
     只要已有任何一个「所有人」策略组(如内置默认策略),
     再新建含 0 的组必然冲突。

修复:跨组冲突检查跳过 AnyoneUserID(0) —— 它是哨兵值不是真实用户,
     允许多个策略组同时包含「所有人」。

验证:
  POST /logs/policy-groups {userIds:[0]}  → 200,id=2 正常创建
  POST userIds:[0,2](混选)               → 400「「所有人」不能与具体用户同时选择」
  GET  /logs/policy-groups                → 默认策略(所有人 · default 命名空间)

镜像:lghost/lokistack:latest + v0.1 = sha256:3222a8716fdd
This commit is contained in:
opsx committed 2026-10-27 03:02:50 +00:00
1 parent cf54be3f7d
commit 188d9460fe
1 file changed
+5
+5
View File
@@ -88,6 +88,11 @@ func validatePolicyGroup(db *repository.JsonDB, group models.LogPolicyGroup, exc
return fmt.Errorf("此数据源已有同名策略组")
}
for _, id := range other.UserIDs {
// AnyoneUserID(0) 是「所有人」哨兵,不是真实用户,
// 允许多个策略组同时包含它(否则新建任何「所有人」策略组都会被这条冲突检查拒掉)
if id == AnyoneUserID {
continue
}
if seen[id] {
return fmt.Errorf("用户 %d 已属于此数据源的另一个策略组", id)
}