You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/UserCenter/DbConfig.cs

217 lines
12 KiB

using Application.Domain.Entities;
using Infrastructure.Application.Entites.Settings;
using Infrastructure.Data;
using Infrastructure.Extensions;
using Infrastructure.Security;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
namespace UserCenter
{
public class DbConfig : IDbConfig
{
private readonly IEncryptionService _encryptionService;
public DbConfig(IEncryptionService encryptionService)
{
this._encryptionService = encryptionService;
}
public void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
}
public void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Setting>();
modelBuilder.Entity<User>().Property(o => o.UserName).IsRequired();
modelBuilder.Entity<User>().HasIndex(o => o.UserName).IsUnique();
modelBuilder.Entity<User>().Property(o => o.Email).IsRequired();
modelBuilder.Entity<User>().HasIndex(o => o.Email).IsUnique();
modelBuilder.Entity<User>().HasIndex(o => o.PhoneNumber).IsUnique();
modelBuilder.Entity<User>().HasIndex(o => o.NickName).IsUnique();
modelBuilder.Entity<Role>().HasIndex(o => o.Name).IsUnique();
modelBuilder.Entity<PermissionCategory>().HasOne(o => o.Parent).WithMany(o => o.Children).HasForeignKey(o => o.ParentId).OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<PermissionCategory>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Permission>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Permission>().HasOne(o => o.Category).WithMany(o => o.Permissions).HasForeignKey(o => o.CategoryId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity<UserRole>().HasOne(o => o.User).WithMany(o => o.UserRoles).HasForeignKey(o => o.UserId);
modelBuilder.Entity<UserRole>().HasOne(o => o.Role).WithMany(o => o.UserRoles).HasForeignKey(o => o.RoleId);
modelBuilder.Entity<RolePermission>().HasOne(o => o.Role).WithMany(o => o.RolePermissions).HasForeignKey(o => o.RoleId);
modelBuilder.Entity<RolePermission>().HasOne(o => o.Permission).WithMany(o => o.RolePermissions).HasForeignKey(o => o.PermissionId);
modelBuilder.Entity<PermissionCategory>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Permission>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<UserRole>().HasIndex(o => new { o.UserId, o.RoleId }).IsUnique();
modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique();
modelBuilder.Entity<Department>().HasOne(o => o.Parent).WithMany(o => o.Children).HasForeignKey(o => o.ParentId);
modelBuilder.Entity<Department>().Property(o => o.Number).IsRequired();
modelBuilder.Entity<Department>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Organ>().Property(o => o.Number).IsRequired();
modelBuilder.Entity<Organ>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<OrganUser>().HasOne(o => o.User).WithMany(o => o.OrganUsers).HasForeignKey(o => o.UserId);
modelBuilder.Entity<OrganUser>().HasOne(o => o.Organ).WithMany(o => o.OrganUsers).HasForeignKey(o => o.OrganId);
modelBuilder.Entity<OrganUser>().HasIndex(o => new { o.UserId, o.OrganId }).IsUnique();
modelBuilder.Entity<UserDepartment>().HasOne(o => o.User).WithMany(o => o.UserDepartments).HasForeignKey(o => o.UserId);
modelBuilder.Entity<UserDepartment>().HasOne(o => o.Department).WithMany(o => o.UserDepartments).HasForeignKey(o => o.DepartmentId);
modelBuilder.Entity<UserDepartment>().HasIndex(o => new { o.UserId, o.DepartmentId }).IsUnique();
//关系
modelBuilder.Entity<Site>();
modelBuilder.Entity<Site>().HasIndex(o => o.Name).IsUnique();
}
public void Seed(DbContext dbContext)
{
var set = dbContext.Set<Setting>();
set.Add(new Setting { Name = "name", Value = "用户中心", Type = SettingType.Text });
set.Add(new Setting { Name = "logo", Value = "/images/logo.png", Type = SettingType.ImageUrl });
set.Add(new Setting { Name = "copyright", Value = "Copyright © {0} Company. All rights reserved", Type = SettingType.Html });
//AccessTokenHours
set.Add(new Setting { Name = "AccessTokenTimeout", Value = "1440", Type = SettingType.Text });
set.Add(new Setting { Name = "RefreshTokenTimeout", Value = "518400", Type = SettingType.Text });
set.Add(new Setting { Name = "MaxFailedAccessAttemptsBeforeLockout", Value = "5", Type = SettingType.Text });
set.Add(new Setting { Name = "DefaultAccountLockoutMinutes", Value = "10", Type = SettingType.Text });
set.Add(new Setting { Name = "CaptchaSeconds", Value = "60", Type = SettingType.Text });
set.Add(new Setting { Name = "RegisterDisabled", Value = "false", Type = SettingType.Text });
//
set.Add(new Setting { Name = "email:host", Value = "nbaxp.com", Type = SettingType.Text });
set.Add(new Setting { Name = "email:port", Value = "25", Type = SettingType.Text });
set.Add(new Setting { Name = "email:user", Value = "admin@nbaxp.com", Type = SettingType.Text });
set.Add(new Setting { Name = "email:password", Value = "123456", Type = SettingType.Text });
set.Add(new Setting { Name = "sms", Value = "false", Type = SettingType.Text });
set.Add(new Setting { Name = "sms:url", Value = "https://api.netease.im/sms/sendcode.action", Type = SettingType.Text });
set.Add(new Setting { Name = "sms:key", Value = "123456", Type = SettingType.Text });
set.Add(new Setting { Name = "sms:secret", Value = "123456", Type = SettingType.Text });
dbContext.SaveChanges();
//
foreach (var item in dbContext.Model.GetEntityTypes())
{
var type = item.ClrType;
var name = type.GetDisplayName();
var number = type.Name;
var category = new PermissionCategory
{
Name = name,
Number = type.Name
};
category.Permissions.Add(new Permission { Name = $"查看{name}", Number = $"Read-{number}" });
category.Permissions.Add(new Permission { Name = $"添加{name}", Number = $"Add-{number}" });
category.Permissions.Add(new Permission { Name = $"修改{name}", Number = $"Edit-{number}" });
category.Permissions.Add(new Permission { Name = $"删除{name}", Number = $"Delete-{number}" });
dbContext.Set<PermissionCategory>().Add(category);
}
dbContext.SaveChanges();
var saRole = new Role { Name = "超级管理员", IsReadOnly = true };
var adminRole = new Role { Name = "管理员", IsReadOnly = true };
var skips = new string[] { "添加权限", "修改权限", "添加权限分类", "修改权限分类" };
foreach (var item in dbContext.Set<Permission>())
{
saRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true });
if (!item.Name.Contains("删除") && !skips.Contains(item.Name))
{
adminRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true });
}
}
var securityStam = "123456";
dbContext.Set<User>().Add(new User
{
UserName = "super",
SecurityStamp = securityStam,
PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam),
PasswordConfirmed = true,
Email = "sa@test.com",
EmailConfirmed = true,
PhoneNumber = "13000000000",
PhoneNumberConfirmed = true,
NickName = "超级管理员",
FaceImage = "/face/sa.jpg",
UserRoles = new List<UserRole> { new UserRole { Role = saRole } }
});
dbContext.Set<User>().Add(new User
{
UserName = "admin",
SecurityStamp = securityStam,
PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam),
PasswordConfirmed = true,
Email = "admin@test.com",
EmailConfirmed = true,
PhoneNumber = "13000000001",
PhoneNumberConfirmed = true,
NickName = "管理员",
FaceImage = "/face/admin.jpg",
UserRoles = new List<UserRole> { new UserRole { Role = adminRole } }
});
dbContext.SaveChanges();
var host = "localhost";
dbContext.Set<Site>().Add(new Site
{
Icon = "/images/iotcenter.png",
Name = "物联网平台",
Description = "内部系统",
Home = $"http://{host}/IoTCenter/",
Login = $"http://{host}/IoTCenter/Account/JsonpLogin",
Logout = $"http://{host}/IoTCenter/Account/JsonpLogout",
Key = "123456"
});
dbContext.Set<Site>().Add(new Site
{
Icon = "/images/studycenter.png",
Name = "学习平台",
Description = "外部系统",
Home = $"http://{host}:8012/",
Login = $"http://{host}:8012/Account/JsonpLogin",
Logout = $"http://{host}:8012/Account/JsonpLogout",
Key = "123456"
});
dbContext.SaveChanges();
var department = new Department
{
Name = "科学技术大学",
Number = "0",
Children = new List<Department>
{
new Department{ Name="人事部",Number="1"},
new Department{ Name="财务部",Number="2"},
new Department{ Name="理学院",Number="3"},
new Department{
Name ="计算机学院",
Number ="4",
Children = new List<Department>
{
new Department
{
Name ="计算机科学与技术专业",
Number ="5",
Children = new List<Department>
{
new Department
{
Name ="2018级",
Number ="6",
Children=new List<Department>
{
new Department{ Name="1班",Number="7" }
}
}
}
}
}
}
}
};
dbContext.Set<Department>().Add(department);
dbContext.SaveChanges();
var departments = dbContext.Set<Department>().ToList();
foreach (var item in departments)
{
item.UpdatePath();
}
dbContext.SaveChanges();
}
}
}