LingAdmin/Backend/Services/AuthorizationService/LingAdmin.AuthorizationService/Data/AuthorizationDbContext.cs

174 lines
8.7 KiB
C#
Raw Permalink Normal View History

2026-04-16 18:13:06 +08:00
using Microsoft.EntityFrameworkCore;
using LingAdmin.Shared.Models;
namespace LingAdmin.AuthorizationService.Data;
public class AuthorizationDbContext : DbContext
{
public AuthorizationDbContext(DbContextOptions<AuthorizationDbContext> options) : base(options)
{
}
public DbSet<Role> Roles { get; set; }
public DbSet<Permission> Permissions { get; set; }
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<RolePermission> RolePermissions { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Role configuration
modelBuilder.Entity<Role>(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<Permission>(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<UserRole>(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<RolePermission>(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<Role>().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<Permission>
{
// 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<Permission>().HasData(permissions);
// Seed RolePermissions - SuperAdmin gets all permissions
var rolePermissions = new List<RolePermission>();
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<RolePermission>().HasData(rolePermissions);
// Assign SuperAdmin role to default admin user (userId = 1)
modelBuilder.Entity<UserRole>().HasData(
new UserRole { UserId = 1, RoleId = 1, AssignedAt = now }
);
}
}