using Microsoft.EntityFrameworkCore; using LingAdmin.Shared.Models; namespace LingAdmin.AuthorizationService.Data; public class AuthorizationDbContext : DbContext { public AuthorizationDbContext(DbContextOptions options) : base(options) { } public DbSet Roles { get; set; } public DbSet Permissions { get; set; } public DbSet UserRoles { get; set; } public DbSet RolePermissions { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Role configuration modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.HasIndex(e => e.Code).IsUnique(); entity.Property(e => e.Name).HasMaxLength(100).IsRequired(); entity.Property(e => e.Code).HasMaxLength(50).IsRequired(); entity.Property(e => e.Description).HasMaxLength(500); entity.Ignore(e => e.UserRoles); }); // Permission configuration modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.HasIndex(e => e.Code).IsUnique(); entity.Property(e => e.Name).HasMaxLength(100).IsRequired(); entity.Property(e => e.Code).HasMaxLength(100).IsRequired(); entity.Property(e => e.Description).HasMaxLength(500); entity.Property(e => e.Resource).HasMaxLength(100).IsRequired(); entity.Property(e => e.Action).HasMaxLength(50).IsRequired(); }); // UserRole configuration (many-to-many) modelBuilder.Entity(entity => { entity.HasKey(e => new { e.UserId, e.RoleId }); entity.HasOne(e => e.Role) .WithMany() .HasForeignKey(e => e.RoleId) .OnDelete(DeleteBehavior.Cascade); entity.Ignore(e => e.User); }); // RolePermission configuration (many-to-many) modelBuilder.Entity(entity => { entity.HasKey(e => new { e.RoleId, e.PermissionId }); entity.HasOne(e => e.Role) .WithMany(r => r.RolePermissions) .HasForeignKey(e => e.RoleId) .OnDelete(DeleteBehavior.Cascade); entity.HasOne(e => e.Permission) .WithMany(p => p.RolePermissions) .HasForeignKey(e => e.PermissionId) .OnDelete(DeleteBehavior.Cascade); }); // Seed data SeedData(modelBuilder); } private void SeedData(ModelBuilder modelBuilder) { var now = new DateTime(2024, 1, 1, 0, 0, 0, DateTimeKind.Utc); // Seed Roles modelBuilder.Entity().HasData( new Role { Id = 1, Name = "超级管理员", Code = "SuperAdmin", Description = "拥有所有权限", IsSystem = true, CreatedAt = now }, new Role { Id = 2, Name = "管理员", Code = "Admin", Description = "系统管理员", IsSystem = true, CreatedAt = now }, new Role { Id = 3, Name = "普通用户", Code = "User", Description = "普通用户", IsSystem = true, CreatedAt = now }, new Role { Id = 4, Name = "编辑", Code = "Editor", Description = "内容编辑", IsSystem = false, CreatedAt = now }, new Role { Id = 5, Name = "审核员", Code = "Auditor", Description = "审核员", IsSystem = false, CreatedAt = now } ); // Seed Permissions var permissions = new List { // User permissions new Permission { Id = 1, Name = "查看用户", Code = "users:read", Resource = "users", Action = "read", CreatedAt = now }, new Permission { Id = 2, Name = "创建用户", Code = "users:create", Resource = "users", Action = "create", CreatedAt = now }, new Permission { Id = 3, Name = "编辑用户", Code = "users:update", Resource = "users", Action = "update", CreatedAt = now }, new Permission { Id = 4, Name = "删除用户", Code = "users:delete", Resource = "users", Action = "delete", CreatedAt = now }, // Role permissions new Permission { Id = 5, Name = "查看角色", Code = "roles:read", Resource = "roles", Action = "read", CreatedAt = now }, new Permission { Id = 6, Name = "创建角色", Code = "roles:create", Resource = "roles", Action = "create", CreatedAt = now }, new Permission { Id = 7, Name = "编辑角色", Code = "roles:update", Resource = "roles", Action = "update", CreatedAt = now }, new Permission { Id = 8, Name = "删除角色", Code = "roles:delete", Resource = "roles", Action = "delete", CreatedAt = now }, // Permission management new Permission { Id = 9, Name = "查看权限", Code = "permissions:read", Resource = "permissions", Action = "read", CreatedAt = now }, new Permission { Id = 10, Name = "分配权限", Code = "permissions:assign", Resource = "permissions", Action = "assign", CreatedAt = now }, // Requisition permissions new Permission { Id = 11, Name = "查看请购单", Code = "requisitions:read", Resource = "requisitions", Action = "read", CreatedAt = now }, new Permission { Id = 12, Name = "创建请购单", Code = "requisitions:create", Resource = "requisitions", Action = "create", CreatedAt = now }, new Permission { Id = 13, Name = "编辑请购单", Code = "requisitions:update", Resource = "requisitions", Action = "update", CreatedAt = now }, new Permission { Id = 14, Name = "删除请购单", Code = "requisitions:delete", Resource = "requisitions", Action = "delete", CreatedAt = now }, new Permission { Id = 15, Name = "审批请购单", Code = "requisitions:approve", Resource = "requisitions", Action = "approve", CreatedAt = now }, // Inventory permissions new Permission { Id = 16, Name = "查看库存", Code = "inventory:read", Resource = "inventory", Action = "read", CreatedAt = now }, new Permission { Id = 17, Name = "管理库存", Code = "inventory:manage", Resource = "inventory", Action = "manage", CreatedAt = now }, // Audit permissions new Permission { Id = 18, Name = "查看审计日志", Code = "audit:read", Resource = "audit", Action = "read", CreatedAt = now }, // Settings permissions new Permission { Id = 19, Name = "查看设置", Code = "settings:read", Resource = "settings", Action = "read", CreatedAt = now }, new Permission { Id = 20, Name = "修改设置", Code = "settings:update", Resource = "settings", Action = "update", CreatedAt = now } }; modelBuilder.Entity().HasData(permissions); // Seed RolePermissions - SuperAdmin gets all permissions var rolePermissions = new List(); for (int i = 1; i <= 20; i++) { rolePermissions.Add(new RolePermission { RoleId = 1, PermissionId = i, AssignedAt = now }); } // Admin gets most permissions except delete and some admin functions var adminPermissions = new[] { 1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; foreach (var permId in adminPermissions) { rolePermissions.Add(new RolePermission { RoleId = 2, PermissionId = permId, AssignedAt = now }); } // User gets basic read permissions var userPermissions = new[] { 1, 5, 11, 12, 16, 19 }; foreach (var permId in userPermissions) { rolePermissions.Add(new RolePermission { RoleId = 3, PermissionId = permId, AssignedAt = now }); } // Editor permissions var editorPermissions = new[] { 1, 5, 11, 12, 13, 16, 19 }; foreach (var permId in editorPermissions) { rolePermissions.Add(new RolePermission { RoleId = 4, PermissionId = permId, AssignedAt = now }); } // Auditor permissions var auditorPermissions = new[] { 1, 5, 11, 15, 16, 18, 19 }; foreach (var permId in auditorPermissions) { rolePermissions.Add(new RolePermission { RoleId = 5, PermissionId = permId, AssignedAt = now }); } modelBuilder.Entity().HasData(rolePermissions); // Assign SuperAdmin role to default admin user (userId = 1) modelBuilder.Entity().HasData( new UserRole { UserId = 1, RoleId = 1, AssignedAt = now } ); } }