- 通用 ChangesEngine:snapshot 钉住 data_cutoff_at、(modify_time,id) 复合游标、 仅最后一页签发 next_sync_token、软删 tombstone;sync_token/cursor 为 HMAC-SHA256 无状态令牌(SyncTokenCodec),过期/篡改/跨快照/数据域变更 统一 SYNC_CURSOR_EXPIRED - 注册式实体扩展:SyncEntity/Registry + users(m0.user)/properties(m0.properyt)/ contracts(m2.contract_new) 三个实现;生效修改时间 COALESCE(modify_time, create_time) - 硬约束:GuardedToolCallback 对 *.changes.list 拒绝 tenant_id/scope 入参, 数据域只从 Token 推导;行级权限复用 PermissionService 与 QUERY 工具同一 ACL - 资源隔离:RateLimitService SYNC/QUERY 分档限流(Redis 固定分钟窗)、 limit≤200 截断、SyncQueryTimeoutInterceptor 慢查询超时(三套 SqlSessionFactory 接入) - contract.list.query 补齐 12 字段、contract.detail.query 补 version(ACL 不变) - V5 migration:tool.description 512→1024(含 sql/rollback 回滚文件) - seed-dev.sql:三个 changes 工具绑定进 sync 作用域 - 修复:properyt.customerId 为 NULL 时 Collectors.toMap NPE(冒烟命中), 改为 put 逐条装填(ContractsSyncEntity/ContractTools)
53 lines
3.3 KiB
SQL
53 lines
3.3 KiB
SQL
-- =============================================================
|
||
-- dev 种子数据(仅 dev 环境使用!)
|
||
-- 仅创建作用域并关联工具,不提交固定 token 或 ak。
|
||
-- token 请使用本地随机 ak 的 SHA-256 哈希手工创建,详见 README。
|
||
-- 依赖:tool 表已由应用启动时 ToolSyncService 同步。
|
||
-- =============================================================
|
||
|
||
USE xiaoqu_agent_svc_d;
|
||
|
||
START TRANSACTION;
|
||
|
||
-- 作用域:运营
|
||
INSERT INTO agent_scope (name, code, memo, status, create_id)
|
||
SELECT '运营', 'operation', 'dev 种子:运营作用域', 1, 0
|
||
WHERE NOT EXISTS (SELECT 1 FROM agent_scope WHERE code = 'operation');
|
||
|
||
-- 作用域-工具:sys.ping / agent.count / agent.list.query / property.list.query / agent.detail.query / property.detail.query
|
||
-- / mall.order.list.query / mall.order.detail.query / mall.order.logistics.query
|
||
-- / contract.list.query / contract.detail.query / integration.context.get
|
||
INSERT INTO scope_tool (scope_id, tool_id, create_id)
|
||
SELECT s.id, t.id, 0 FROM agent_scope s JOIN tool t
|
||
WHERE s.code = 'operation' AND t.name IN ('sys.ping', 'agent.count', 'agent.list.query', 'property.list.query', 'agent.detail.query', 'property.detail.query', 'mall.order.list.query', 'mall.order.detail.query', 'mall.order.logistics.query', 'contract.list.query', 'contract.detail.query', 'integration.context.get')
|
||
AND NOT EXISTS (SELECT 1 FROM scope_tool st WHERE st.scope_id = s.id AND st.tool_id = t.id);
|
||
|
||
-- 作用域:hardware(出纸机查询)
|
||
INSERT INTO agent_scope (name, code, memo, status, create_id)
|
||
SELECT '出纸机', 'hardware', 'dev 种子:出纸机查询作用域', 1, 0
|
||
WHERE NOT EXISTS (SELECT 1 FROM agent_scope WHERE code = 'hardware');
|
||
|
||
-- 作用域-工具:hardware.list.query / hardware.detail.query
|
||
INSERT INTO scope_tool (scope_id, tool_id, create_id)
|
||
SELECT s.id, t.id, 0 FROM agent_scope s JOIN tool t
|
||
WHERE s.code = 'hardware' AND t.name IN ('hardware.list.query', 'hardware.detail.query')
|
||
AND NOT EXISTS (SELECT 1 FROM scope_tool st WHERE st.scope_id = s.id AND st.tool_id = t.id);
|
||
|
||
-- 作用域:sync(SYNC 增量同步;changes 工具由 REQ-20260911-0013 注册并绑定到本作用域)
|
||
-- 个人 Token 禁调 SYNC 工具靠 token_scope 白名单天然生效:个人 Token 不绑定本作用域即 PERMISSION_DENIED,
|
||
-- 无需任何拦截代码。只为服务 Token(principal_type=service)勾选 sync 作用域。
|
||
INSERT INTO agent_scope (name, code, memo, status, create_id)
|
||
SELECT '数据同步', 'sync', 'SYNC 增量同步作用域(5628 注册 *.changes.list 工具后绑定,仅服务 Token 使用)', 1, 0
|
||
WHERE NOT EXISTS (SELECT 1 FROM agent_scope WHERE code = 'sync');
|
||
|
||
-- sync 作用域-工具:integration.context.get(服务 Token 自检入口)+ 三个 changes 工具(REQ-20260911-0013)
|
||
INSERT INTO scope_tool (scope_id, tool_id, create_id)
|
||
SELECT s.id, t.id, 0 FROM agent_scope s JOIN tool t
|
||
WHERE s.code = 'sync' AND t.name IN ('integration.context.get', 'users.changes.list', 'properties.changes.list', 'contracts.changes.list')
|
||
AND NOT EXISTS (SELECT 1 FROM scope_tool st WHERE st.scope_id = s.id AND st.tool_id = t.id);
|
||
|
||
COMMIT;
|
||
|
||
-- 校验
|
||
SELECT s.id, s.code, t.name FROM agent_scope s JOIN scope_tool st ON s.id = st.scope_id JOIN tool t ON st.tool_id = t.id WHERE s.soft_delete = 0;
|