pub(crate) fn subscriber_visible_to_caller(
sub_acc_ids: &HashSet<u64>,
caller_allowed: Option<&HashSet<u64>>,
) -> boolExpand description
v1.4.39 Phase 5 filter 核心决策(pure function,便于单测):
判断 push 是否应推给某个订阅者。2 层 gate:
- subscriber acc_ids:
futu_sub_acc_push参数里用户指定的 acc_id 列表 (空集 = subscribe-all,即不做 subscriber 级过滤) - key allowed_acc_ids (v1.4.39):注册时快照的 per-key 白名单。defense-in-depth 层,防止 agent 订阅了 key 无权限的 acc_id(主 auth 在 guard.rs tool 调用 时 enforce,但 push 是服务端主动发起绕过 tool 调用)
两层都 pass 才推。行情类 push (push_acc_id=None) 跳过所有 acc_id gate。
v1.4.58 MED-NEW-3(2nd code review): summary 过滤决策 pure function。
用于 push_subscribers_summary 的 cross-tenant filter —— scope mode 下 caller
只能看到自己 allowed_acc_ids 有交集的订阅(防止跨租户泄漏其他 agent 的
acc_ids)。
规则:
caller_allowed = None或空集(legacy / unrestricted)→ 全可见- 被查订阅的
sub_acc_ids空集(subscribe-all)→ 全可见(没有 specific 账户可泄漏) - 否则 → 只要
sub_acc_ids与caller_allowed有任一交集 → 可见