AUP tree 不是 access-control list。隐藏一个 node、命名一条 data path 或渲染一个 button,都不会授予 caller 读取、写入、执行或 bridge 该资源的权限。
session substitution 的语义很窄
$session.* 有两种不同角色:
- presentation condition 可以读取 session 事实,如
$session.authenticated或$session.role == owner; - path substitution 只发生在
src、bind、propBind中,不发生在普通 props、event 或 execution argument 中。
例如:
input display-name
bind="/user/persons/$session.did/profile/display-name"server 从 own field 对每个 session 做 path substitution;缺失值会保持为 unresolved token,而不会虚构身份。client 也不能通过发送 UI message 来声称自己的 caller identity。
renderer 不是 authorization authority
AFS/provider/runtime policy 才决定已经解析的 read、write 或 exec action 是否允许。UI visibility 与 navigation 只是呈现。拒绝 javascript: 或 .. 的 validation 是有用的 input safety,但不替代 service-side permission policy。
frame、bridge、remote surface 与 write-capable flow 都需要各自的 trust、origin、session 与 scope review。两个 target 上外观相同的 button,也可能背后使用不同 authorization context。
嵌入规则见 Frame、bridge 与嵌入 surface;data-binding 语义见 Event、state 与 binding。