打开文档导航

权限为什么有生命周期

一句话

Pysolate 不把权限长期寄存在 Python 解释器里;Host 先封存不可变 Plan,再为具体 Run/attempt 建立 Broker 和调用上下文,让授权、调用、证据与终结都可追踪。

先看一个例子

可以把一次 Run 想成一次酒店入住。前台不会把万能钥匙交给住客,而是制作一张本次入住有效的门卡:能开哪扇门、可以使用几次、何时失效,都由前台决定。

Python 程序相当于住客。它可以决定先整理行李还是先下楼,也可以选择根本不使用某项服务;但它不能因为在纸上写了“总经理办公室”,就让门卡获得新权限。退房后,房间和门卡都可以销毁,前台仍保留这次入住的受限记录。

这个类比只说明权限归属。Pysolate 的权限对象并不是一张可复制的字符串 token,而是一组由 Host 封存并在调用路径上检查的对象。

真实机制

一次 authority lifecycle(权限生命周期)大致经过这些阶段:

Host 注册 Spec 和 Grant

一次性封存 Plan,确定 capability、预算与 identity

为本次 Run/attempt 建立专属 Broker context 和 Guest 可见接口

Guest 到达调用点,Broker 做 admission 和 dispatch

Host 记录 receipt、结果状态和 terminal disposition

Run finalize;若接入 staged/prepared 机制,处置未消费结果;随后 cleanup

Plan admission 发生在执行前。Plan 一旦封存,Guest 只能使用其中公开的 capability 和预算。Python 函数名、异常文本、旧 receipt 或 cache hit 都不能给当前 Run 增加权限。

Fresh Guest(每次从干净状态开始的执行环境)因此不需要“重新发明”权限关系。Guest 可以销毁;新的 Run 由 Host 选择已封存的 Plan,并建立新的 Broker、调用身份和预算状态。Plan 可以作为不可变 Host 配置存在更久,短期调用上下文仍绑定到具体 Run/attempt。

为什么重要

技术上: 权限不依赖某个解释器一直存活。系统可以更换 Guest、回收失败执行,或在符合条件时选择不同 backend,同时继续由 Host 判断当前 Run 到底获准做什么。

产品和业务上: Agent 可以使用真实数据源和外部服务,而服务方不必把长期凭证与隐含状态交给一段持续运行、不断变化的 Python 进程。一次任务出了问题,也更容易判断应当终结哪一份权限和记录。

不能推出什么

  • Fresh Guest 不代表启动没有成本,也不代表所有外部 effect 都可以安全重试。
  • Plan identity 是封存内容的 digest,不是数字签名,也不证明外部 policy 在业务语义上正确。
  • Cleanup 只能终结本地生命周期;已经提交给外部系统的 effect 不会因此自动回滚。

术语卡

  • Authority:执行某项受控操作的有效权限。
  • Authority lifecycle:权限从注册、封存、使用到终结的完整过程。
  • Plan:Host 一次性封存的 capability、Grant identity 和预算集合;具体 Broker context 另按 Run/attempt 建立。
  • Fresh Guest:不继承上一次隐藏运行状态的 Guest。
  • Terminal disposition:Host 对一次 Run 或 attempt 作出的最终处置。

继续阅读