Files
portal-mini-go/scripts/001_rbac.sql
T
2026-10-26 22:01:41 +08:00

75 lines
3.7 KiB
SQL

-- 后台 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`);