174 lines
8.7 KiB
C#
174 lines
8.7 KiB
C#
|
|
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 }
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|