PluginsHooksExamples
角色解析为什么必须唯一
用角色解析场景说明 resolve 为什么不能让多个 plugin 一起返回答案
角色解析为什么必须唯一
场景
宿主现在要回答一个问题:
- 当前这个用户最终是什么角色
这时它会调用:
const role = await agent.plugins.resolve<{ userId: string }, string>(
"auth.resolve_role",
{ userId: "owner" },
);为什么这里不能有两个 resolver
因为如果两个 plugin 都能回答:
- A 说是
admin - B 说是
member
那宿主就必须再写一层仲裁逻辑。
但 resolve 这个设计本来就是为了避免“再加一层仲裁”。
它的意思就是:
- 当前这个点,必须提前决定唯一权威
所以当前实现才会这样设计
- 重复注册同一个 resolve 点:直接报错
- 没注册 resolver:直接报错
- resolver 对应 plugin disabled:直接报错
这三个规则本质上是在保护一件事:
- 最终答案必须明确
如果你其实想让多人都参与
那你大概率不应该用 resolve。
更可能的正确结构是:
- 先用
pipeline汇总上下文 - 最后再由一个
resolve给最终答案