-- 用户表（扩展admin_user表，添加盐字段）
ALTER TABLE `admin_user` 
ADD COLUMN `salt` VARCHAR(32) NULL COMMENT '密码盐' AFTER `password`;

-- 角色表
CREATE TABLE IF NOT EXISTS `admin_role` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
  `role_name` VARCHAR(50) NOT NULL COMMENT '角色名称',
  `role_code` VARCHAR(50) NOT NULL COMMENT '角色编码（唯一）',
  `description` VARCHAR(255) NULL COMMENT '角色描述',
  `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态：0-禁用 1-启用',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_role_code` (`role_code`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员角色表';

-- 权限表
CREATE TABLE IF NOT EXISTS `admin_permission` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '权限ID',
  `permission_name` VARCHAR(100) NOT NULL COMMENT '权限名称',
  `permission_code` VARCHAR(100) NOT NULL COMMENT '权限编码（唯一）',
  `path` VARCHAR(255) NOT NULL COMMENT '访问路径（Controller路径，如：/admin/user/list）',
  `method` VARCHAR(10) NULL DEFAULT 'ALL' COMMENT 'HTTP方法：GET,POST,PUT,DELETE,ALL',
  `description` VARCHAR(255) NULL COMMENT '权限描述',
  `parent_id` INT(11) NULL DEFAULT 0 COMMENT '父权限ID（0表示顶级）',
  `sort_order` INT(11) NULL DEFAULT 0 COMMENT '排序顺序',
  `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态：0-禁用 1-启用',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_permission_code` (`permission_code`),
  KEY `idx_path` (`path`),
  KEY `idx_status` (`status`),
  KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员权限表';

-- 用户角色关联表
CREATE TABLE IF NOT EXISTS `admin_user_role` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` INT(11) NOT NULL COMMENT '用户ID',
  `role_id` INT(11) NOT NULL COMMENT '角色ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_role` (`user_id`, `role_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_role_id` (`role_id`),
  CONSTRAINT `fk_user_role_user` FOREIGN KEY (`user_id`) REFERENCES `admin_user` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_user_role_role` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';

-- 角色权限关联表
CREATE TABLE IF NOT EXISTS `admin_role_permission` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `role_id` INT(11) NOT NULL COMMENT '角色ID',
  `permission_id` INT(11) NOT NULL COMMENT '权限ID',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_role_permission` (`role_id`, `permission_id`),
  KEY `idx_role_id` (`role_id`),
  KEY `idx_permission_id` (`permission_id`),
  CONSTRAINT `fk_role_permission_role` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_role_permission_permission` FOREIGN KEY (`permission_id`) REFERENCES `admin_permission` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';

-- 初始化超级管理员角色
INSERT INTO `admin_role` (`role_name`, `role_code`, `description`, `status`) 
VALUES ('超级管理员', 'SUPER_ADMIN', '拥有所有权限的超级管理员', 1)
ON DUPLICATE KEY UPDATE `role_name` = '超级管理员';

-- 初始化普通管理员角色
INSERT INTO `admin_role` (`role_name`, `role_code`, `description`, `status`) 
VALUES ('普通管理员', 'ADMIN', '普通管理员', 1)
ON DUPLICATE KEY UPDATE `role_name` = '普通管理员';

-- 初始化常用权限（示例）
INSERT INTO `admin_permission` (`permission_name`, `permission_code`, `path`, `method`, `description`, `parent_id`, `sort_order`, `status`) VALUES
('用户管理', 'USER_MANAGE', '/admin/user/**', 'ALL', '用户管理相关权限', 0, 1, 1),
('用户列表', 'USER_LIST', '/admin/user/list', 'GET', '查看用户列表', 1, 1, 1),
('用户注册', 'USER_REGISTER', '/admin/user/register', 'POST', '注册新用户', 1, 2, 1),
('用户编辑', 'USER_EDIT', '/admin/user/edit/**', 'PUT', '编辑用户信息', 1, 3, 1),
('用户删除', 'USER_DELETE', '/admin/user/delete/**', 'DELETE', '删除用户', 1, 4, 1),
('角色管理', 'ROLE_MANAGE', '/admin/role/**', 'ALL', '角色管理相关权限', 0, 2, 1),
('权限管理', 'PERMISSION_MANAGE', '/admin/permission/**', 'ALL', '权限管理相关权限', 0, 3, 1)
ON DUPLICATE KEY UPDATE `permission_name` = VALUES(`permission_name`);

