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)。