166 lines
6.7 KiB
C#
166 lines
6.7 KiB
C#
using AmtScanner.Api.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace AmtScanner.Api.Data;
|
|
|
|
/// <summary>
|
|
/// 数据库种子数据
|
|
/// </summary>
|
|
public static class DbSeeder
|
|
{
|
|
/// <summary>
|
|
/// 初始化种子数据
|
|
/// </summary>
|
|
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<Role>
|
|
{
|
|
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<User>
|
|
{
|
|
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<UserRole>
|
|
{
|
|
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<Menu>
|
|
{
|
|
// 仪表盘菜单 - 与前端 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" },
|
|
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" },
|
|
|
|
// 系统管理菜单 - 与前端 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" },
|
|
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" },
|
|
new() { Id = 12, ParentId = 10, Name = "Role", Path = "role", Component = "/system/role", Title = "menus.system.role", KeepAlive = true, Sort = 2, Roles = "R_SUPER" },
|
|
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" },
|
|
new() { Id = 14, ParentId = 10, Name = "Menus", Path = "menu", Component = "/system/menu", Title = "menus.system.menu", KeepAlive = true, Sort = 4, Roles = "R_SUPER" }
|
|
};
|
|
|
|
// 使用 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<RoleMenu>();
|
|
|
|
// 超级管理员拥有所有菜单
|
|
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("✅ 角色菜单权限已分配");
|
|
}
|
|
}
|