-- 后台 RBAC 权限管理建表脚本(admin_ 前缀,与小程序业务物理隔离)。 -- 执行顺序:先建表,再建索引(GORM 已含唯一索引定义,此处显式列出便于审阅)。 -- 种子管理员与 super_admin 角色由服务启动时自动初始化(见 rbac.Provider.Seed)。 CREATE TABLE IF NOT EXISTS `admin_users` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(64) NOT NULL, `password_hash` VARCHAR(255) NOT NULL, `nickname` VARCHAR(128) DEFAULT '', `status` TINYINT NOT NULL DEFAULT 1, `created_at` DATETIME(3) NULL, `updated_at` DATETIME(3) NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_admin_users_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `admin_roles` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `code` VARCHAR(64) NOT NULL, `name` VARCHAR(128) NOT NULL, `description` VARCHAR(512) DEFAULT '', `status` TINYINT NOT NULL DEFAULT 1, `created_at` DATETIME(3) NULL, `updated_at` DATETIME(3) NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_admin_roles_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `admin_permissions` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `code` VARCHAR(128) NOT NULL, `name` VARCHAR(128) NOT NULL, `type` VARCHAR(16) NOT NULL DEFAULT 'api', `method` VARCHAR(16) DEFAULT '', `path` VARCHAR(255) DEFAULT '', `parent_id` BIGINT UNSIGNED NOT NULL DEFAULT 0, `sort` INT NOT NULL DEFAULT 0, `created_at` DATETIME(3) NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_admin_permissions_code` (`code`), KEY `idx_admin_permissions_parent` (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `admin_user_roles` ( `admin_id` BIGINT UNSIGNED NOT NULL, `role_id` BIGINT UNSIGNED NOT NULL, PRIMARY KEY (`admin_id`, `role_id`), KEY `idx_admin_user_roles_role` (`role_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `admin_role_permissions` ( `role_id` BIGINT UNSIGNED NOT NULL, `permission_id` BIGINT UNSIGNED NOT NULL, 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`);