-- RBAC权限系统数据库迁移脚本 -- MySQL 8.0+ -- 创建角色表 CREATE TABLE IF NOT EXISTS `roles` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '角色ID', `name` VARCHAR(255) NOT NULL COMMENT '角色名称', `slug` VARCHAR(50) NOT NULL COMMENT '角色标识', `description` VARCHAR(500) DEFAULT NULL COMMENT '角色描述', `level` TINYINT UNSIGNED NOT NULL DEFAULT 50 COMMENT '角色级别(越大越高)', `guard_name` VARCHAR(50) NOT NULL DEFAULT 'web' COMMENT '守护名称', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted_at` DATETIME DEFAULT NULL COMMENT '删除时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_roles_slug` (`slug`), KEY `idx_roles_level` (`level`), KEY `idx_roles_deleted_at` (`deleted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表'; -- 创建权限表 CREATE TABLE IF NOT EXISTS `permissions` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '权限ID', `name` VARCHAR(255) NOT NULL COMMENT '权限名称', `slug` VARCHAR(100) NOT NULL COMMENT '权限标识', `group_name` VARCHAR(100) DEFAULT NULL COMMENT '权限分组', `description` VARCHAR(500) DEFAULT NULL COMMENT '权限描述', `sort` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted_at` DATETIME DEFAULT NULL COMMENT '删除时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_permissions_slug` (`slug`), KEY `idx_permissions_group_name` (`group_name`), KEY `idx_permissions_deleted_at` (`deleted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表'; -- 创建角色权限关联表 CREATE TABLE IF NOT EXISTS `role_permissions` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `role_id` BIGINT UNSIGNED NOT NULL COMMENT '角色ID', `permission_id` BIGINT UNSIGNED NOT NULL COMMENT '权限ID', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_role_permissions_role_permission` (`role_id`, `permission_id`), KEY `idx_role_permissions_permission_id` (`permission_id`), CONSTRAINT `fk_role_permissions_role` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE, CONSTRAINT `fk_role_permissions_permission` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表'; -- 创建用户角色关联表 CREATE TABLE IF NOT EXISTS `user_roles` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID', `role_id` BIGINT UNSIGNED NOT NULL COMMENT '角色ID', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_roles_user_role` (`user_id`, `role_id`), KEY `idx_user_roles_role_id` (`role_id`), CONSTRAINT `fk_user_roles_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, CONSTRAINT `fk_user_roles_role` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表'; -- 插入默认超级管理员角色 INSERT INTO `roles` (`name`, `slug`, `description`, `level`, `guard_name`) VALUES ('超级管理员', 'super_admin', '系统超级管理员,拥有所有权限', 100, 'web'), ('管理员', 'admin', '系统管理员,拥有大部分权限', 80, 'web'), ('普通用户', 'user', '普通用户,拥有基础权限', 50, 'web'); -- 插入默认权限 INSERT INTO `permissions` (`name`, `slug`, `group_name`, `description`, `sort`) VALUES -- 用户模块 ('用户查看', 'user.view', '用户模块', '查看用户信息', 1), ('用户创建', 'user.create', '用户模块', '创建新用户', 2), ('用户编辑', 'user.edit', '用户模块', '编辑用户信息', 3), ('用户删除', 'user.delete', '用户模块', '删除用户', 4), -- 角色模块 ('角色查看', 'role.view', '角色模块', '查看角色信息', 1), ('角色创建', 'role.create', '角色模块', '创建新角色', 2), ('角色编辑', 'role.edit', '角色模块', '编辑角色信息', 3), ('角色删除', 'role.delete', '角色模块', '删除角色', 4), ('角色分配权限', 'role.assign', '角色模块', '分配角色权限', 5), -- 订单模块 ('订单查看', 'order.view', '订单模块', '查看订单', 1), ('订单创建', 'order.create', '订单模块', '创建订单', 2), ('订单编辑', 'order.edit', '订单模块', '编辑订单', 3), ('订单删除', 'order.delete', '订单模块', '删除订单', 4), -- 商品模块 ('商品查看', 'goods.view', '商品模块', '查看商品', 1), ('商品创建', 'goods.create', '商品模块', '创建商品', 2), ('商品编辑', 'goods.edit', '商品模块', '编辑商品', 3), ('商品删除', 'goods.delete', '商品模块', '删除商品', 4), -- 系统模块 ('系统配置', 'system.config', '系统模块', '系统配置管理', 1), ('操作日志', 'system.log', '系统模块', '查看操作日志', 2); -- 为超级管理员角色分配所有权限 INSERT INTO `role_permissions` (`role_id`, `permission_id`) SELECT r.id, p.id FROM roles r, permissions p WHERE r.slug = 'super_admin'; -- 为管理员角色分配大部分权限(除了系统配置) INSERT INTO `role_permissions` (`role_id`, `permission_id`) SELECT r.id, p.id FROM roles r, permissions p WHERE r.slug = 'admin' AND p.slug != 'system.config';