using System.Linq; using EntityFramework.DynamicFilters; using IwbZero.Authorization.Base.Users; using IwbZero.MultiTenancy; using WePlatform.Authorization.Roles; using WePlatform.Authorization.Users; using WePlatform.Configuration; using WePlatform.EF; using WePlatform.MultiTenancy; namespace WePlatform.SeedData { public class TestDataBuilder { private readonly WePlatformDbContext _context; private readonly int _tenantId; public TestDataBuilder(WePlatformDbContext context, int tenantId=1) { _context = context; _tenantId = tenantId; } public void Create() { _context.DisableAllFilters(); //new DefaultViewAndSpCreate(_context).Create(); new DefaultTypesCreator(_context).Create(); new DefaultDataCreator(_context).Create(); new RoleUserCreator(_context).Create(); new DefaultSettingsCreator(_context).Create(); new DefaultStatesCreator(_context).Create(); new DefaultNotificationsCreator(_context).Create(); //new DefaultAppGuidsCreator(_context).Create(); _context.SaveChanges(); } } public class RoleUserCreator { private readonly WePlatformDbContext _context; private int DefaultTenantId { get; set; } public RoleUserCreator(WePlatformDbContext context) { _context = context; DefaultTenantId = 1; } public void Create() { CreateHostUsers(); CreateDefaultTenant(); CreateRolesAndUsers(); } private void CreateHostUsers() { // Admin user for host var adminUserForHost = _context.Users .FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostAdminName); if (adminUserForHost == null) { var user = User.CreateHostAdminUser(); user.SetNormalizedNames(); adminUserForHost = _context.Users.Add(user); _context.SaveChanges(); } //AddUserPermission(adminUserForHost.Id, null); // SYSTEM user for host var systemUserForHost = _context.Users .FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostSystemName); if (systemUserForHost == null) { var user = User.CreateHostSystemUser(); user.SetNormalizedNames(); systemUserForHost = _context.Users.Add(user); _context.SaveChanges(); } //AddUserPermission(systemUserForHost.Id, null); } private void CreateDefaultTenant() { var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Iwb"); if (defaultTenant == null) { defaultTenant = _context.Tenants.Add(new Tenant(TenantBase.DefaultTenantName, $"{TenantBase.DefaultTenantName}-租主")); _context.SaveChanges(); } DefaultTenantId = defaultTenant.Id; } private void CreateRolesAndUsers() { // admin role var adminRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.Admin); if (adminRole == null) { adminRole = _context.Roles .Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.Admin, StaticRoleNames.Tenants.Admin) { IsStatic = true, RoleType = UsersAndRolesTypeDefinition.Supper, AccountType = AccountTypeDefinition.System, }); _context.SaveChanges(); } //AddRolePermission(adminRole.Id); // Admin user var adminUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.AdminUserName); if (adminUser == null) { adminUser = User.CreateTenantAdminUser(DefaultTenantId); adminUser.IsEmailConfirmed = true; adminUser.IsActive = true; adminUser = _context.Users.Add(adminUser); _context.SaveChanges(); } // User Permission //AddUserPermission(adminUser.Id); // System role var systemRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.System); if (systemRole == null) { systemRole = _context.Roles .Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.System, StaticRoleNames.Tenants.System) { IsStatic = true, RoleType = UsersAndRolesTypeDefinition.Supper, AccountType = AccountTypeDefinition.System, }); _context.SaveChanges(); } // Role Permission //AddRolePermission(systemRole.Id); // System user var systemUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.SystemUserName); if (systemUser == null) { systemUser = User.CreateTenantSystemUser(DefaultTenantId); systemUser.IsEmailConfirmed = true; systemUser.IsActive = true; systemUser = _context.Users.Add(systemUser); _context.SaveChanges(); // Assign Admin role to admin user _context.UserRoles.Add(new UserRole(DefaultTenantId, systemUser.Id, systemRole.Id)); _context.SaveChanges(); } } } }