using AmtScanner.Api.Models; using Microsoft.EntityFrameworkCore; namespace AmtScanner.Api.Data; /// /// 数据库种子数据 /// public static class DbSeeder { /// /// 初始化种子数据 /// public static async Task SeedAsync(AppDbContext context) { await SeedRolesAsync(context); await SeedUsersAsync(context); await SeedMenusAsync(context); await SeedRoleMenusAsync(context); } private static async Task SeedRolesAsync(AppDbContext context) { if (await context.Roles.AnyAsync()) return; var roles = new List { new() { RoleName = "超级管理员", RoleCode = "R_SUPER", Description = "拥有所有权限", Enabled = true }, new() { RoleName = "管理员", RoleCode = "R_ADMIN", Description = "系统管理员", Enabled = true }, new() { RoleName = "普通用户", RoleCode = "R_USER", Description = "普通用户", Enabled = true } }; context.Roles.AddRange(roles); await context.SaveChangesAsync(); Console.WriteLine("✅ 默认角色已创建"); } private static async Task SeedUsersAsync(AppDbContext context) { if (await context.Users.AnyAsync()) return; // 创建默认用户 var users = new List { new() { UserName = "Super", PasswordHash = BCrypt.Net.BCrypt.HashPassword("123456"), NickName = "超级管理员", Email = "super@example.com", Status = "1", Gender = "1" }, new() { UserName = "Admin", PasswordHash = BCrypt.Net.BCrypt.HashPassword("123456"), NickName = "管理员", Email = "admin@example.com", Status = "1", Gender = "1" }, new() { UserName = "User", PasswordHash = BCrypt.Net.BCrypt.HashPassword("123456"), NickName = "普通用户", Email = "user@example.com", Status = "1", Gender = "2" } }; context.Users.AddRange(users); await context.SaveChangesAsync(); // 分配角色 var superRole = await context.Roles.FirstAsync(r => r.RoleCode == "R_SUPER"); var adminRole = await context.Roles.FirstAsync(r => r.RoleCode == "R_ADMIN"); var userRole = await context.Roles.FirstAsync(r => r.RoleCode == "R_USER"); var superUser = await context.Users.FirstAsync(u => u.UserName == "Super"); var adminUser = await context.Users.FirstAsync(u => u.UserName == "Admin"); var normalUser = await context.Users.FirstAsync(u => u.UserName == "User"); var userRoles = new List { new() { UserId = superUser.Id, RoleId = superRole.Id }, new() { UserId = adminUser.Id, RoleId = adminRole.Id }, new() { UserId = normalUser.Id, RoleId = userRole.Id } }; context.UserRoles.AddRange(userRoles); await context.SaveChangesAsync(); Console.WriteLine("✅ 默认用户已创建: Super/Admin/User (密码: 123456)"); } private static async Task SeedMenusAsync(AppDbContext context) { if (await context.Menus.AnyAsync()) return; var menus = new List { // 仪表盘菜单 - 与前端 dashboard.ts 匹配(系统内置) new() { Id = 1, Name = "Dashboard", Path = "/dashboard", Component = "/index/index", Title = "menus.dashboard.title", Icon = "ri:pie-chart-line", Sort = 1, Roles = "R_SUPER,R_ADMIN,R_USER", IsSystem = true }, new() { Id = 2, ParentId = 1, Name = "Console", Path = "console", Component = "/dashboard/console", Title = "menus.dashboard.console", KeepAlive = false, Sort = 1, Roles = "R_SUPER,R_ADMIN,R_USER", IsSystem = true }, // 系统管理菜单 - 与前端 system.ts 匹配(系统内置) new() { Id = 10, Name = "System", Path = "/system", Component = "/index/index", Title = "menus.system.title", Icon = "ri:user-3-line", Sort = 99, Roles = "R_SUPER,R_ADMIN", IsSystem = true }, new() { Id = 11, ParentId = 10, Name = "User", Path = "user", Component = "/system/user", Title = "menus.system.user", KeepAlive = true, Sort = 1, Roles = "R_SUPER,R_ADMIN", IsSystem = true }, new() { Id = 12, ParentId = 10, Name = "Role", Path = "role", Component = "/system/role", Title = "menus.system.role", KeepAlive = true, Sort = 2, Roles = "R_SUPER", IsSystem = true }, new() { Id = 13, ParentId = 10, Name = "UserCenter", Path = "user-center", Component = "/system/user-center", Title = "menus.system.userCenter", IsHide = true, KeepAlive = true, Sort = 3, Roles = "R_SUPER,R_ADMIN,R_USER", IsSystem = true }, new() { Id = 14, ParentId = 10, Name = "Menus", Path = "menu", Component = "/system/menu", Title = "menus.system.menu", KeepAlive = true, Sort = 4, Roles = "R_SUPER", IsSystem = true } }; // 使用 IDENTITY_INSERT 插入带 ID 的数据 foreach (var menu in menus) { context.Menus.Add(menu); } await context.SaveChangesAsync(); Console.WriteLine("✅ 默认菜单已创建"); } private static async Task SeedRoleMenusAsync(AppDbContext context) { if (await context.RoleMenus.AnyAsync()) return; var superRole = await context.Roles.FirstAsync(r => r.RoleCode == "R_SUPER"); var adminRole = await context.Roles.FirstAsync(r => r.RoleCode == "R_ADMIN"); var userRole = await context.Roles.FirstAsync(r => r.RoleCode == "R_USER"); var allMenuIds = await context.Menus.Select(m => m.Id).ToListAsync(); var adminMenuIds = await context.Menus .Where(m => m.Roles != null && (m.Roles.Contains("R_ADMIN") || m.Roles.Contains("R_USER"))) .Select(m => m.Id).ToListAsync(); var userMenuIds = await context.Menus .Where(m => m.Roles != null && m.Roles.Contains("R_USER")) .Select(m => m.Id).ToListAsync(); var roleMenus = new List(); // 超级管理员拥有所有菜单 foreach (var menuId in allMenuIds) { roleMenus.Add(new RoleMenu { RoleId = superRole.Id, MenuId = menuId }); } // 管理员菜单 foreach (var menuId in adminMenuIds) { roleMenus.Add(new RoleMenu { RoleId = adminRole.Id, MenuId = menuId }); } // 普通用户菜单 foreach (var menuId in userMenuIds) { roleMenus.Add(new RoleMenu { RoleId = userRole.Id, MenuId = menuId }); } context.RoleMenus.AddRange(roleMenus); await context.SaveChangesAsync(); Console.WriteLine("✅ 角色菜单权限已分配"); } }