feat(tasks): implement atomic claims and leases
This commit is contained in:
@@ -79,7 +79,12 @@
|
||||
- 请求在边界完成类型、大小、媒体类型和业务规则校验。
|
||||
- 领取任务必须使用事务;不得先 GET 再由客户端自行标记占用。
|
||||
- 状态变化校验当前状态、设备归属、claim token、版本和租约。
|
||||
- 创建、领取、完成和证据上传的重试路径必须幂等。
|
||||
- App 必须在 claim 请求前生成并安全保存独立的 256 bit claim token 与幂等 key;
|
||||
后端只存 token SHA-256,响应、事件和日志不得返回原值或 hash。
|
||||
- claim/start/release/cancel-ack 和后续完成/证据上传的重试路径必须幂等;`NO_TASK`
|
||||
也必须是稳定幂等结果。
|
||||
- 设备/任务 heartbeat 使用服务端时钟且不写高频事件;过期 RUNNING 不得自动回到
|
||||
队列。管理取消执行中任务必须等 App 安全确认,不能提前伪装为终态。
|
||||
- 不向客户端返回 `password_hash`、`token_hash`、存储绝对路径或供应商密钥。
|
||||
- 管理 Cookie 与 BUYER 设备 Bearer token 使用独立 middleware,不得互相替代;
|
||||
每次鉴权都重新检查用户/设备启用、绑定、撤销和过期状态。
|
||||
@@ -92,7 +97,8 @@
|
||||
- 创建和取消任务必须从认证上下文传入真实 ADMIN actor 并写入只追加事件;共享
|
||||
`local-admin` 只用于 MVP 资源可见范围,不能冒充操作者。
|
||||
- 通用错误使用稳定 code 和可读 message;内部堆栈只进受控日志。
|
||||
- 文件访问通过鉴权接口,防止路径遍历和猜测 URL。
|
||||
- 文件访问通过鉴权接口,防止路径遍历和猜测 URL;App 参考图读取必须重新校验当前
|
||||
task/user/device/generation/token/租约,不能只凭 asset UUID 授权。
|
||||
- Go 命令固定 `GOTOOLCHAIN=local`;`go.mod` 不得出现更高 Go 版本或未固定的
|
||||
`@latest` 依赖。
|
||||
- 后端不得自动加载 `.env`、默认开启 CORS、使用包级数据库单例,或在库、handler、
|
||||
|
||||
Reference in New Issue
Block a user