diff --git a/configs/config.yaml b/configs/config.yaml index 0508599..8582a2f 100644 --- a/configs/config.yaml +++ b/configs/config.yaml @@ -5,12 +5,12 @@ server: mysql: # MySQL 独立配置项;敏感信息通过环境变量注入,禁止硬编码。 - host: "${DB_HOST:-127.0.0.1}" - port: "${DB_PORT:-3306}" - user: "${DB_USER}" - password: "${DB_PASSWORD}" - database: "${DB_DATABASE}" - charset: "${DB_CHARSET:-utf8mb4}" + host: 124.222.13.236 + port: 3306 + user: dev + password: JsfiJaWNM7dwREZa + database: dev + charset: utf8mb4 parse_time: "${DB_PARSE_TIME:-True}" loc: "${DB_LOC:-Local}" # 连接池 diff --git a/scripts/001_rbac.sql b/scripts/001_rbac.sql index ae6726e..e6b5142 100644 --- a/scripts/001_rbac.sql +++ b/scripts/001_rbac.sql @@ -54,3 +54,21 @@ CREATE TABLE IF NOT EXISTS `admin_role_permissions` ( PRIMARY KEY (`role_id`, `permission_id`), KEY `idx_admin_role_permissions_perm` (`permission_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- --------------------------------------------------------------------------- +-- 种子数据:超级管理员角色与首个管理员账号。 +-- 与服务启动时 rbac.Provider.Seed 逻辑一致,供纯 SQL 初始化使用; +-- 采用 ON DUPLICATE KEY UPDATE 保证可重复执行(重复执行仅刷新,不报错)。 +-- 密码 admin123 已按 bcrypt.DefaultCost 预哈希(与 internal/pkg/auth 一致)。 +-- --------------------------------------------------------------------------- +INSERT INTO `admin_roles` (`id`, `code`, `name`, `description`, `status`, `created_at`, `updated_at`) +VALUES (1, 'super_admin', '超级管理员', '系统内置超级管理员角色,拥有全部权限', 1, NOW(3), NOW(3)) +ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `description` = VALUES(`description`); + +INSERT INTO `admin_users` (`id`, `username`, `password_hash`, `nickname`, `status`, `created_at`, `updated_at`) +VALUES (1, 'admin', '$2a$10$hk/mJdUR86eyOrMuy7LGIOATNIbqZa3aw6hJAE/4f5MjP9pU5vjIe', '超级管理员', 1, NOW(3), NOW(3)) +ON DUPLICATE KEY UPDATE `password_hash` = VALUES(`password_hash`), `status` = VALUES(`status`), `nickname` = VALUES(`nickname`); + +INSERT INTO `admin_user_roles` (`admin_id`, `role_id`) +VALUES (1, 1) +ON DUPLICATE KEY UPDATE `role_id` = VALUES(`role_id`); diff --git a/scripts/002_miniapp.sql b/scripts/002_miniapp.sql new file mode 100644 index 0000000..2d29981 --- /dev/null +++ b/scripts/002_miniapp.sql @@ -0,0 +1,39 @@ +-- 小程序管理 & 小程序用户建表脚本(mini_ / users 前缀,与后台 RBAC 物理隔离)。 +-- 执行顺序:先建表,再建索引(GORM 已含唯一/普通索引定义,此处显式列出便于审阅)。 +-- 表结构与 internal/model/miniapp.go、internal/model/user.go 保持一致。 + +-- 被后台纳管的小程序配置,AppID 全局唯一。 +-- DeletedAt 为 GORM 软删除字段,已建普通索引以支持软删除过滤。 +CREATE TABLE IF NOT EXISTS `mini_programs` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(128) NOT NULL, + `description` VARCHAR(512) DEFAULT '', + `app_id` VARCHAR(64) NOT NULL, + `app_secret` VARCHAR(128) NOT NULL, + `status` TINYINT NOT NULL DEFAULT 1, + `ext` TEXT, + `created_at` DATETIME(3) NULL, + `updated_at` DATETIME(3) NULL, + `deleted_at` DATETIME(3) NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_mini_programs_app_id` (`app_id`), + KEY `idx_mini_programs_deleted_at` (`deleted_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- 小程序端用户。mini_id 关联被纳管小程序(mini_programs.id), +-- 与 open_id 共同唯一标识一个用户;查询统一按 (mini_id, openid) 索引过滤。 +-- union_id 建普通索引便于跨小程序去重/聚合。 +CREATE TABLE IF NOT EXISTS `users` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + `mini_id` BIGINT UNSIGNED NOT NULL, + `openid` VARCHAR(64) NOT NULL, + `union_id` VARCHAR(64) DEFAULT '', + `nickname` VARCHAR(128) DEFAULT '', + `avatar` VARCHAR(512) DEFAULT '', + `status` TINYINT NOT NULL DEFAULT 1, + `created_at` DATETIME(3) NULL, + `updated_at` DATETIME(3) NULL, + PRIMARY KEY (`id`), + KEY `idx_users_mini_openid` (`mini_id`, `openid`), + KEY `idx_users_union_id` (`union_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;