zizi ca53a0db0c feat(trade): U2 R-ECON admin赋余额+会员订阅(独立流水表+幂等)
codex 评审 NO-MERGE→修 P0(订阅幂等漏洞:独立幂等账本表 game_trade_subscription_grant+uk_biz_no,延期前先写、同事务)+P1(VO @Size/totalIncome注释对齐/权限种子SQL)。V21。plan 2026-06-18-002 U2。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 03:56:58 +00:00

38 lines
3.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =============================================================================
-- trade 模块 admin 权限点登记 SQL(U2 经济:admin 赋余额 / 赋订阅 两端点鉴权所需 system_menu 种子)
-- 文件:game-cloud/game-module-trade/sql/trade_menu.sql
-- 设计依据:U2 R-ECON(docs/plans/2026-06-18-002)+ TradeAdminController @PreAuthorize('trade:account:grant' / 'trade:subscription:grant')。
--
-- ⚠️ 为什么不进 Flyway V21(与 biz_menu.sql 同理):
-- 1) V21.0.0__create_game_trade_subscription.sql 两副本(contracts/db-schemas/ + huijing-server/.../db/migration/)必须字节一致(md5 全等),
-- 把权限 seed 塞进 V21 会破坏副本字节一致、触发 flyway validate 崩;
-- 2) huijing 菜单 seed 一贯走独立 SQL(sql/mysql/ruoyi-vue-pro.sql / game-module-biz/sql/biz_menu.sql 同范式),
-- 权限点不属 Flyway 业务表迁移范畴。故 trade 权限点照「单独菜单初始化 SQL」方式登记,与 V21 解耦、不破副本一致性。
--
-- 执行方式(mini-desktop staging,幂等可重复执行;INSERT IGNORE 撞 id 即跳过):
-- mysql --default-character-set=utf8mb4 -h<host> -u<user> -p<pwd> <db> < game-cloud/game-module-trade/sql/trade_menu.sql
-- (含中文,务必 --default-character-set=utf8mb4 防乱码。)
--
-- 放行说明:
-- huijing 超级管理员角色(system_role.code='super_admin',type=1)对 @ss.hasPermission 全量放行(*:*:*),
-- 登记菜单行后超管即可调用赋余额/赋订阅端点;分配给普通运营角色由运营在 game-admin「角色管理」按需勾选(不在本 SQL)。
-- id 取 7110~7112(biz_menu.sql 已占 7100~7107,huijing base seed system_menu 7110+ 区间未占用,避免碰撞)。
-- 范围:本 SQL 仅登记 U2 新增的赋余额/赋订阅两权限点(NO-MERGE 范围);trade 其余 withdraw/income/report 权限点不在本次范围。
-- =============================================================================
-- 父菜单:经营管理(type=2 菜单,parent_id=0 顶级;前端路由/组件由前端按需补,本 SQL 仅登记后端鉴权所需节点)
INSERT IGNORE INTO `system_menu`
(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`,
`status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(7110, '经营管理', '', 2, 110, 0, 'trade-ops', 'ep:wallet', 'trade/ops/index', 'TradeOps',
0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- 2 个按钮权限点(type=3 按钮,parent_id=7110,对齐 TradeAdminController U2 端点 @PreAuthorize)
INSERT IGNORE INTO `system_menu`
(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`,
`status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(7111, 'admin 赋余额', 'trade:account:grant', 3, 1, 7110, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(7112, 'admin 赋订阅', 'trade:subscription:grant', 3, 2, 7110, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');