easynet.run · 全部问题场景

客户撤销授权了,排队的 AI 任务还没执行。

客户昨晚同意处理一批文件,任务排着队没开始。今天客户撤回许可,界面显示撤销成功;到了下午,工作进程拿着昨天保存的批准继续读文件。授权状态已经变了,执行却仍活在提交任务的那个时刻。

这类问题应先在现有任务系统处理。它若已经在读取前检查当前权限,就保留这套控制。只有当任务跨服务等待、继续派生新的工作时,才需要进一步核对每个真正接触资源的入口是否都看到了变化。

通过 EasyNet 接入受控处理函数,可以在调用进入时检查身份和访问条件。但队列保存的应是任务请求与授权依据,而不是一张永远有效的通行证。出队后,处理程序仍需在读取文件之前查当前许可,失效就结束任务,并说明没有执行。

例如,文件分析任务保存客户、文件范围、用途和授权版本。客户撤回后,尚未开始的项进入拒绝状态;已经开始的项则要区分读到了哪里,能否停止后续步骤。旧的批准记录可以留作解释请求来历,不能继续充当当前授权。

这需要队列与业务授权系统接通,也需要处理程序在适当位置响应停止。下游若再次读取资源,应重新检查,而非因为上游曾经获准就继续。外部请求已经发出但无法取消时,应如实显示这部分仍在途,不能把取消按钮变成一个虚假的保证。

测试时先暂停工作进程、提交任务、撤销许可,再恢复执行,确认没有读到文件。随后测试执行中撤销,分别记录已发生与成功阻止的部分。客户需要知道的是撤销到底改变了什么;它可以阻止新的访问,却不能让已经交出的副本从外部系统自动消失。

  1. 01

    任务进入队列

    保存范围、用途与原始授权依据。

  2. 02

    客户撤回许可

    业务授权系统更新当前状态。

  3. 03

    读取前拒绝

    出队重新检查,不沿用旧批准。

排队保存请求,读取前确认当前许可。

在读取动作前检查当前状态

单进程顺序示例,真实并发撤销需业务系统的原子检查或合适同步。

本地示例 · python
current_permission = {'active': False}
reads = []

def process(job):
    if not current_permission['active']:
        return 'denied_before_read'
    reads.append(job['file'])
    return 'read'

print(process({'file': 'customer-demo.csv'}))
print('read count:', len(reads))

预期结果:denied_before_read且read count为0,旧排队状态不授权读取。

接入时的检查项
  • 撤销后出队任务不会读取受控资源。
  • 派生任务重新访问时同样检查权限。
  • 状态区分未执行拒绝与已经发生的处理。
源码与接入资料