using System.Linq; using WeOnlineApp.Authorization.Roles; using WeOnlineApp.Authorization.Users; using WeOnlineApp.Configuration; using WeOnlineApp.EF; using WeOnlineApp.MultiTenancy; using IwbZero.Authorization.Base.Permissions; using IwbZero.Authorization.Base.Users; using IwbZero.MultiTenancy; namespace WeOnlineApp.SeedData { public class RoleAndUserCreator { private readonly WeOnlineAppDbContext _context; private int DefaultTenantId { get; set; } public RoleAndUserCreator(WeOnlineAppDbContext 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(); } } #region 添加权限 /// /// 添加用户权限 /// /// /// private void AddUserPermission(long userId, int? tenantId = 0) { tenantId = tenantId == 0 ? DefaultTenantId : tenantId; var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime); foreach (var fun in funs) { _context.Permissions.Add(new PermissionSetting() { Name = fun.PermissionName, TenantId = tenantId, IsGranted = true, Master = 2, MasterValue = userId + "" }); } _context.SaveChanges(); } /// /// 添加角色权限 /// /// /// private void AddRolePermission(int roleId, int? tenantId = 0) { var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime); tenantId = tenantId == 0 ? DefaultTenantId : tenantId; foreach (var fun in funs) { _context.Permissions.Add(new PermissionSetting { Name = fun.PermissionName, TenantId = tenantId, IsGranted = true, Master = 1, MasterValue = roleId + "" }); } _context.SaveChanges(); } #endregion } }