using System.Collections.Generic; using System.Configuration; using System.Linq; using ContractService.Authorization; using ContractService.Authorization.Roles; using ContractService.Authorization.Users; using ContractService.Configuration; using ContractService.EF; using ContractService.MultiTenancy; using IwbZero.Authorization.Base.Permissions; using IwbZero.Authorization.Base.Users; using IwbZero.MultiTenancy; namespace ContractService.SeedData { public class RoleAndUserCreator { private readonly ContractServiceDbContext _context; private int DefaultTenantId { get; set; } public RoleAndUserCreator(ContractServiceDbContext context) { _context = context; DefaultTenantId = 1; } public void Create() { _context.Database.ExecuteSqlCommand("TRUNCATE TABLE [dbo].[Sys_Permissions]"); CreateHostUsers(); CreateDefaultTenant(); CreateRolesAndUsers(); CreateDefaultRoles(); } 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 readonly List sys= new List() { PermissionNames.Pages, PermissionNames.PagesCaseContractMg , PermissionNames.PagesCaseContractMgCaseMg, PermissionNames.PagesCaseContractMgCaseMgQuery, PermissionNames.PagesCaseContractMgContractMg, PermissionNames.PagesCaseContractMgContractMgQuery, PermissionNames.PagesCaseContractMgContractMgSetLawFirm, PermissionNames.PagesCaseContractMgContractMgKeyPointMg, PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery, PermissionNames.PagesLegalLawFirmMg, PermissionNames.PagesLegalLawFirmMgLawFirmMg, PermissionNames.PagesLegalLawFirmMgLawFirmMgQuery, PermissionNames.PagesLegalLawFirmMgLawyerMg, PermissionNames.PagesLegalLawFirmMgLawyerMgQuery, PermissionNames.PagesClientMg, PermissionNames.PagesClientMgCompanyMg, PermissionNames.PagesClientMgCompanyMgQuery, PermissionNames.PagesClientMgStaffMg, PermissionNames.PagesClientMgStaffMgQuery, PermissionNames.PagesBasicMg, PermissionNames.PagesBasicMgServiceTypeMg, PermissionNames.PagesBasicMgServiceTypeMgQuery, PermissionNames.PagesBasicMgServiceTypeMgCreate, PermissionNames.PagesBasicMgServiceTypeMgUpdate, PermissionNames.PagesBasicMgServiceTypeMgDelete, PermissionNames.PagesSystemMg, PermissionNames.PagesSystemMgUserMg, PermissionNames.PagesSystemMgUserMgQuery, PermissionNames.PagesSystemMgUserMgCreate, PermissionNames.PagesSystemMgUserMgUpdate, PermissionNames.PagesSystemMgUserMgAuth, PermissionNames.PagesSystemMgUserMgResetLock, PermissionNames.PagesSystemMgHelpMg, PermissionNames.PagesSystemMgHelpMgQuery, PermissionNames.PagesSystemMgHelpMgCreate, PermissionNames.PagesSystemMgHelpMgUpdate, PermissionNames.PagesSystemMgHelpMgDelete, PermissionNames.PagesSystemMgLogMg, PermissionNames.PagesSystemMgLogMgQuery, PermissionNames.PagesUserHelpInfo, PermissionNames.PagesUserSysSetting, PermissionNames.PagesUserSysSettingLoginImage, PermissionNames.PagesUserSysSettingHomeImage, PermissionNames.PagesUserSysSettingRefreshCache, PermissionNames.PagesUserSysSettingRefreshLang, }; readonly List company= new List() { PermissionNames.Pages, PermissionNames.PagesCaseContractMg , PermissionNames.PagesCaseContractMgCaseMg, PermissionNames.PagesCaseContractMgCaseMgQuery, PermissionNames.PagesCaseContractMgCaseMgCreate, PermissionNames.PagesCaseContractMgCaseMgUpdate, PermissionNames.PagesCaseContractMgCaseMgDelete, PermissionNames.PagesCaseContractMgCaseMgSetStaff, PermissionNames.PagesCaseContractMgCaseMgChangeState, PermissionNames.PagesCaseContractMgCaseMgNote, PermissionNames.PagesCaseContractMgCaseMgRestart, PermissionNames.PagesCaseContractMgContractMg, PermissionNames.PagesCaseContractMgContractMgQuery, PermissionNames.PagesCaseContractMgContractMgCreate, PermissionNames.PagesCaseContractMgContractMgUpdate, PermissionNames.PagesCaseContractMgContractMgDelete, PermissionNames.PagesCaseContractMgContractMgSetStaff, PermissionNames.PagesCaseContractMgContractMgChangeState, PermissionNames.PagesCaseContractMgContractMgNote, PermissionNames.PagesCaseContractMgContractMgSupplement, PermissionNames.PagesCaseContractMgContractMgRestart, PermissionNames.PagesCaseContractMgContractMgKeyPointMg, PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery, PermissionNames.PagesCaseContractMgContractMgKeyPointMgCreate, PermissionNames.PagesCaseContractMgContractMgKeyPointMgUpdate, PermissionNames.PagesCaseContractMgContractMgKeyPointMgDelete, PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeState, PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeEvidence, PermissionNames.PagesCaseContractMgContractMgKeyPointMgSetOrg, PermissionNames.PagesCaseContractMgContractMgKeyPointMgRestart, PermissionNames.PagesCaseContractMgContractMgKeyPointMgNote, PermissionNames.PagesClientMg, PermissionNames.PagesClientMgCompanyMg, PermissionNames.PagesClientMgCompanyMgQuery, PermissionNames.PagesClientMgCompanyMgCreate, PermissionNames.PagesClientMgCompanyMgUpdate, PermissionNames.PagesClientMgCompanyMgDelete, PermissionNames.PagesClientMgCompanyMgMasterStaff, PermissionNames.PagesClientMgStaffMg, PermissionNames.PagesClientMgStaffMgQuery, PermissionNames.PagesClientMgStaffMgCreate, PermissionNames.PagesClientMgStaffMgUpdate, PermissionNames.PagesClientMgStaffMgDelete, PermissionNames.PagesClientMgStaffMgBind, PermissionNames.PagesClientMgStaffMgUnBind, PermissionNames.PagesClientMgOrgMg, PermissionNames.PagesClientMgOrgMgQuery, PermissionNames.PagesClientMgOrgMgCreate, PermissionNames.PagesClientMgOrgMgUpdate, PermissionNames.PagesClientMgOrgMgDelete, PermissionNames.PagesClientMgOrgMgOrgAuth, PermissionNames.PagesSystemMg, //PermissionNames.PagesSystemMgUserMg, //PermissionNames.PagesSystemMgUserMgQuery, //PermissionNames.PagesSystemMgUserMgCreate, //PermissionNames.PagesSystemMgUserMgUpdate, //PermissionNames.PagesSystemMgUserMgAuth, //PermissionNames.PagesSystemMgUserMgResetLock, PermissionNames.PagesUserHelpInfo, PermissionNames.PagesUserSysSetting, PermissionNames.PagesUserSysSettingLoginImage, PermissionNames.PagesUserSysSettingHomeImage, PermissionNames.PagesUserSysSettingRefreshCache, PermissionNames.PagesUserSysSettingRefreshLang, }; readonly List lawFirm= new List() { PermissionNames.Pages, PermissionNames.PagesCaseContractMg , PermissionNames.PagesCaseContractMgCaseMg, PermissionNames.PagesCaseContractMgCaseMgQuery, PermissionNames.PagesCaseContractMgContractMg, PermissionNames.PagesCaseContractMgContractMgQuery, PermissionNames.PagesCaseContractMgContractMgNote, PermissionNames.PagesCaseContractMgContractMgLawNote, PermissionNames.PagesCaseContractMgContractMgSetLawyer, PermissionNames.PagesCaseContractMgContractMgKeyPointMg, PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery, PermissionNames.PagesCaseContractMgContractMgKeyPointMgCreate, PermissionNames.PagesCaseContractMgContractMgKeyPointMgUpdate, PermissionNames.PagesCaseContractMgContractMgKeyPointMgDelete, PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeState, PermissionNames.PagesCaseContractMgContractMgKeyPointMgRestart, PermissionNames.PagesCaseContractMgContractMgKeyPointMgLawNote, PermissionNames.PagesCaseContractMgContractMgKeyPointMgNote, PermissionNames.PagesLegalLawFirmMg, PermissionNames.PagesLegalLawFirmMgLawFirmMg, PermissionNames.PagesLegalLawFirmMgLawFirmMgQuery, PermissionNames.PagesLegalLawFirmMgLawFirmMgCreate, PermissionNames.PagesLegalLawFirmMgLawFirmMgUpdate, PermissionNames.PagesLegalLawFirmMgLawFirmMgDelete, PermissionNames.PagesLegalLawFirmMgLawFirmMgMasterLawyer, PermissionNames.PagesLegalLawFirmMgLawyerMg, PermissionNames.PagesLegalLawFirmMgLawyerMgQuery, PermissionNames.PagesLegalLawFirmMgLawyerMgCreate, PermissionNames.PagesLegalLawFirmMgLawyerMgUpdate, PermissionNames.PagesLegalLawFirmMgLawyerMgDelete, PermissionNames.PagesLegalLawFirmMgLawyerMgBind, PermissionNames.PagesLegalLawFirmMgLawyerMgUnBind, PermissionNames.PagesLegalLawFirmMgLawOrgMg, PermissionNames.PagesLegalLawFirmMgLawOrgMgQuery, PermissionNames.PagesLegalLawFirmMgLawOrgMgCreate, PermissionNames.PagesLegalLawFirmMgLawOrgMgUpdate, PermissionNames.PagesLegalLawFirmMgLawOrgMgDelete, PermissionNames.PagesLegalLawFirmMgLawOrgMgOrgAuth, PermissionNames.PagesSystemMg, //PermissionNames.PagesSystemMgUserMg, //PermissionNames.PagesSystemMgUserMgQuery, //PermissionNames.PagesSystemMgUserMgCreate, //PermissionNames.PagesSystemMgUserMgUpdate, //PermissionNames.PagesSystemMgUserMgAuth, //PermissionNames.PagesSystemMgUserMgResetLock, PermissionNames.PagesUserHelpInfo, PermissionNames.PagesUserSysSetting, PermissionNames.PagesUserSysSettingLoginImage, PermissionNames.PagesUserSysSettingHomeImage, PermissionNames.PagesUserSysSettingRefreshCache, PermissionNames.PagesUserSysSettingRefreshLang, }; private void CreateDefaultRoles() { CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.System"], "系统管理员默认角色", UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.System, sys); CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.Company"], "企业负责人默认角色", UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.Client, company); CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.LawFirm"], "律所负责人默认角色", UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.Lawyer, lawFirm); } private void CreateRole(string name,string displayName,int roleType,int accountType,List permList) { var role = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == name); if (role == null) { role = _context.Roles .Add(new Role(DefaultTenantId, name, displayName) { IsStatic = true, RoleType = roleType, AccountType = accountType, Description = displayName }); _context.SaveChanges(); } if (permList != null) { foreach (var perm in permList) { _context.Permissions.Add(new PermissionSetting { Name = perm, TenantId = DefaultTenantId, IsGranted = true, Master = 1, MasterValue = role.Id + "" }); } } } } }