WU / 文档通用微前端
中文

权限与信任边界

manifest/宿主权限交集、可撤销身份、UI 角色,以及插件、AI 和服务器的独立控制。

版本、变更与要求见 Framework 3.2 与 CLI 1.0。

有效权限

WU 将 manifest 请求与 shell grants 的交集作为权限。没有请求或 grants 时,应用不会获得技术 capabilities。添加应用未请求的 grant 也不会扩大其权限。

{
  "name": "cart",
  "entry": "assets/cart.js",
  "wu": {
    "permissions": [
      { "capability": "store.read", "resource": "cart", "required": true },
      { "capability": "store.write", "resource": "cart.items", "required": true },
      { "capability": "events.emit", "resource": "cart:changed" }
    ]
  }
}
await wu.init({
  apps: [{
    name: 'cart',
    url: '/apps/cart',
    grants: [
      { capability: 'store.read', resource: 'cart' },
      { capability: 'store.write', resource: 'cart.items' },
      { capability: 'events.emit', resource: 'cart:changed' },
    ],
  }],
});

required: true 要求请求被完整覆盖才能注册应用。可选请求可能被拒绝或仅部分覆盖;策略会保留诊断。可选并不意味着首次调用时就会自动授权。

支持的技术 capabilities

能力 操作
events.emit 在获授权资源上发射事实事件
events.subscribe 订阅允许的事件
rpc.provide 提供总线 handlers 和方法契约
rpc.call 请求响应并使用契约
store.read 读取、获取快照并订阅路径
store.write 对路径执行写入和 batch
drag.offer 在拖动中提供某一类型的数据
drag.accept 在放置目标接受某一类型的数据

store.update 同时需要读取和写入权限。不存在任意的 device.*、deploy.* 或 build.* grants;列表在 wu-policy.js 中固定定义。

资源使用精确字符串或末尾通配符。对于 store,通配符必须占据完整路径段,如 cart.*。wu:、system: 和 app: 是事件发射与 RPC 提供/调用的保留命名空间。events.emit:* 请求会与它们重叠,不能用来授予全部宿主权限。

生命周期中的身份

core 为每个应用创建 lease,并提供冻结的 facade。每个方法检查 lease 是否仍有效;函数附加正确身份,不允许应用通过更改 appName 冒充其他应用。

卸载会撤销 facades 并清理关联资源。通过 facade 使用的契约也会被包装,在撤销后失败。全局变量保存的旧 facade 不会在同名应用重新挂载时恢复权限:新的生命周期会创建新身份。

在 4.0 中,全部十三个 adapters 的事件/store hooks 都遵循应用 facade。这保护了合作式调用,但 module 共享 realm,仍可访问 host。Shadow DOM 和同源沙箱无法隔离恶意代码;需要该边界时,应使用另一 origin 上的远程应用。

四类不同的控制

控制 决定什么 不决定什么
WU 技术 grants 总线、RPC 和 store 路径的使用 后端数据访问
setPrincipal / 角色 应用是否可以在 UI 中挂载 服务器上可靠的用户授权
插件权限 安装 API 提供哪些方法 约束已在宿主中执行的代码
AI flags AI actions 的读取、写入、DOM、网络或执行 远程操作的领域权限

插件配置使用另一份列表:mount、events、store、apps、config、unsafe。宿主必须明确授予请求的权限。AI actions 使用 executeActions、writeStore 和 network 等 flags。这些列表不能相互替代。

服务器边界

凭据、资源访问、幂等性和持久审计属于经过身份验证的服务。action handler 是宿主代码,可以在闭包中捕获 fetch 或高权限客户端;向 handler 提供的 API 无法约束该闭包。

对于具有副作用的操作,应设计 gateway,在执行前验证身份、参数、范围、策略和审批。Timeline 和 store 不会撤销发送、付款、build 或基础设施变更。如果领域允许撤销,需要实现明确的补偿操作。

wu-framework/server subpath 提供 createNonce、securityHeaders、buildCsp、middleware 和响应 wrappers。这些 helpers 构建响应头;实际安装由提供页面和资源的服务器负责。

受控迁移

await wu.init({
  compatibility: { profile: 'compat-v2', warnings: 'once' },
  apps: [],
});
console.table(wu.compatibility.getMigrationReport());

compat-v2 配置档启用针对 eventPermissions、插件隐式 grants 和 AI actions 隐式执行的特定兼容桥接。这是带诊断的显式迁移,不应成为新应用的基础配置。strictEvents: false 也是为可信代码提供的显式绕行选项,会减少总线检查。

实现参考

策略:src/core/wu-policy.js、src/core/wu-policy.js、src/core/wu-policy.js;leases:src/core/wu-core.js 和 src/core/wu-core.js;插件:src/core/wu-plugin.js;AI 默认值:src/ai/wu-ai-permissions.js;兼容性:src/core/wu-compatibility.js。测试:tests/unit/capability-security-v3.test.js、tests/unit/plugin-security.test.js、tests/unit/security-regressions.test.js、tests/security/compatibility-boundaries.test.js。

一起完善 WU

发现了问题?有新的想法?

你的使用体验能让 WU 变得更好。告诉我们遇到的问题,或支持项目的持续开发。