Skip to content

Latest commit

 

History

History
28 lines (18 loc) · 2.47 KB

acl-semantics.md

File metadata and controls

28 lines (18 loc) · 2.47 KB

CloudFile V2 目录 ACL 语义(当前 dev)

本文件取代旧 v0.8/v0.9 规则与 CF_ENABLE_DIR_ACL 开关描述。当前 dev 即 V2;最终以 Hub cloudfile_ext/v2/acl_policy.py 和 Server 实际授权入口为准。

基础资格与目录作用域

  1. 用户具备 CE 原生 r/rw 库资格时,默认从库根 / 访问。cf_dir_acl 无匹配规则时沿用 CE 权限。
  2. 用户不具备库资格时,必须命中当前用户或可信群组在某个目录的正向规则,同时 share_mode=true,才能从共享目录根访问。
  3. share_mode=true 是同一 ACL 记录的属性,不是另一套共享目录表;链接不自动产生库资格。共享根的父目录、兄弟目录和库根均不得泄露。
  4. 有匹配目录规则时,在合格导航范围内允许局部 r/rw 扩权和缩权;不可访问的祖先阻止普通路径穿越。

当前代码的求解规则

  • 存储权限仅 r、rw、invisible;none 只是无资格的内部结果。
  • 当前 Hub 在主体轨道上依次优先 user、org、role,同类型适用规则以更深层覆盖浅层;同类型同层多匹配,显式拒绝优先,否则 rw 高于 r。这是当前实现,不应误写为尚未落地的“跨主体路径优先”。
  • inherit=false 仅阻止该规则向子级传播,不切断其自身目录所继承的其他有效规则。
  • 原生库 r 不是目录显式 rw 的永久上限;CE 硬只读、禁用库或失效身份仍不得被目录规则绕开。
  • 企业 Directory 组织树默认不因为 parent 关系自动包含子组织;主体成员应依据可信 Directory 投影。

执行与失效

目录浏览、搜索、原生按路径权限、文件读写和提交应使用同一 Hub Authority 与 C/Go 最终检查。单条目录 ACL 不改变整个库的类别,也不能让所有旧链接自动失效。对于原生整库同步等没有具体路径证明的协议,可以拒绝其整库操作,但不能据此拒绝已充分授权的普通目录访问。

发生内部 Hub/SQL/主体查询失败,不能回退原生宽权限。删除或修改 ACL 后需要重新校验最终 Commit、搜索、下载票据,不能依赖历史授权缓存。

回归测试矩阵

库无 ACL / 库有无关 ACL / 同路径缩权 / 同路径扩权 / 父拒绝与子共享 / 无库权限共享根 / 多组交叉 / 祖先规则 inherit=false / 只读库 / SQL 故障 / 过期成员 / 修改权限后的最终 Commit / 旧协议无范围证明。