Skip to main content

Module access

Module access 

Source
Expand description

accessKeys 运行时判决(读路径行条件 + 写路径子集校验的公共解析)。

声明解析见 [crate::schema::access_keys];本模块只消费已校验的 crate::schema::AccessKeyDef 与 crate::permission::Context 清单。

语义:

  • 读:{字段: {"$in": 清单}},与 owner / RBAC 条件 $and 叠加; 单值字段 = 标量成员判定,array 字段 = 交集命中(Mongo 原生 $in 语义);
  • 写:单值目标 ∈ 清单、array 目标 ⊆ 清单(见写校验函数);
  • ctx 缺键且未 bypass → ERR_PERMISSION:ACCESS:(fail closed,禁静默放行);
  • 清单: [] 是结论(读 0 行 / 写全拒),缺键是错误,两者严格区分。

Constants§

ERR_ACCESS_PREFIX
accessKeys 拒绝错误统一前缀(Host 依此前缀映射 PermissionError)

Functions§

is_bypassed
角色是否命中该键的 bypassRoles(internal 恒豁免)。
probe_fields
探针需额外投影的受控字段名(缺键即 Err,保证探针前已完成 fail closed)。
resolve_list
取 ctx 清单;缺键 / 形态非法 → 显式 Err(fail closed)。
row_condition
读/写行条件:按 action 取 read / write 引用键,逐键生成 $in 条件并 $and。
validate_doc_values
探针文档校验:对被操作文档当前值做单值 ∈ 清单 / array ⊆ 清单(子集,非交集)。
validate_raw_operators
原生操作符($inc / $unset / $push / $pull / $addToSet 等)不得改写 受控字段;$set 放行(其值已由 validate_write_values 校验)。
validate_write_values
payload 目标值校验:单值目标 ∈ 清单;array 目标 ⊆ 清单。
write_restricted
该 schema 本次写是否受 accessKeys 管控(ctx=None / internal / 全部 bypass / write=None → false)。