TenantsAppService.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using System.Web.Mvc;
  5. using System.Web.WebPages;
  6. using Abp.Application.Services.Dto;
  7. using Abp.Auditing;
  8. using Abp.Authorization;
  9. using Abp.Domain.Repositories;
  10. using Abp.Runtime.Caching;
  11. using Abp.Runtime.Security;
  12. using WeApp.Authorization;
  13. using WeApp.Authorization.Roles;
  14. using WeApp.Authorization.Users;
  15. using WeApp.BaseSystem.Tenants.Dto;
  16. using WeApp.Configuration;
  17. using WeApp.MultiTenancy;
  18. using IwbZero.AppServiceBase;
  19. using IwbZero.Authorization.Base.SystemInfo;
  20. namespace WeApp.BaseSystem.Tenants
  21. {
  22. [AbpAuthorize]
  23. public class TenantsAppService : IwbAsyncCrudAppService<Tenant, TenantDto, int, IwbPagedRequestDto, TenantCreateDto, TenantUpdateDto>
  24. , ITenantsAppService
  25. {
  26. public TenantsAppService(
  27. ICacheManager cacheManager,
  28. IRepository<Tenant, int> repository, TenantManager tenantManager, RoleManager roleManager, UserManager userManager, IRepository<SysSetting, long> settingRepository) : base(repository, "")
  29. {
  30. _tenantManager = tenantManager;
  31. _roleManager = roleManager;
  32. _userManager = userManager;
  33. _settingRepository = settingRepository;
  34. CacheManager = cacheManager;
  35. }
  36. private readonly TenantManager _tenantManager;
  37. private readonly IRepository<SysSetting, long> _settingRepository;
  38. // private readonly EditionManager _editionManager;
  39. private readonly RoleManager _roleManager;
  40. private readonly UserManager _userManager;
  41. //private readonly IIwbDbMigrator _iwbDbMigrator;Tenant
  42. protected override bool KeyIsAuto { get; set; } = false;
  43. #region GetSelect
  44. [DisableAuditing]
  45. public override async Task<List<SelectListItem>> GetSelectList()
  46. {
  47. var list = await Repository.GetAllListAsync();
  48. var sList = new List<SelectListItem> { new SelectListItem { Text = @"请选择...", Value = "", Selected = true } };
  49. foreach (var l in list)
  50. {
  51. sList.Add(new SelectListItem { Text = l.Name, Value = l.TenancyName });
  52. }
  53. return sList;
  54. }
  55. [DisableAuditing]
  56. public override async Task<string> GetSelectStr()
  57. {
  58. var list = await Repository.GetAllListAsync();
  59. string str = "<option value=\"\" selected>请选择...</option>";
  60. foreach (var l in list)
  61. {
  62. str += $"<option value=\"{l.TenancyName}\">{l.Name}</option>";
  63. }
  64. return str;
  65. }
  66. #endregion
  67. #region CURD
  68. [DisableAuditing]
  69. [AbpAuthorize(PermissionNames.PagesSystemMgTenantMgQuery)]
  70. public override async Task<PagedResultDto<TenantDto>> GetAll(IwbPagedRequestDto input)
  71. {
  72. var query = CreateFilteredQuery(input);
  73. query = ApplyFilter(query, input);
  74. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  75. query = ApplySorting(query, input);
  76. query = ApplyPaging(query, input);
  77. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  78. var dtos = new PagedResultDto<TenantDto>(
  79. totalCount,
  80. entities.Select(MapToEntityDto).ToList()
  81. );
  82. return dtos;
  83. }
  84. [AbpAuthorize(PermissionNames.PagesSystemMgTenantMgCreate)]
  85. public override async Task Create(TenantCreateDto input)
  86. {
  87. //Create tenant
  88. var tenant = ObjectMapper.Map<Tenant>(input);
  89. input.ConnectionString =
  90. System.Web.Configuration.WebConfigurationManager.ConnectionStrings[IwbConsts.ConnectionStringName].ToString();
  91. tenant.ConnectionString = input.ConnectionString.IsEmpty()
  92. ? null
  93. : SimpleStringCipher.Instance.Encrypt(input.ConnectionString);
  94. await _tenantManager.CreateAsync(tenant);
  95. await CurrentUnitOfWork.SaveChangesAsync(); //To get new tenant's id.
  96. //Create tenant database
  97. //_iwbDbMigrator.CreateOrMigrateForTenant(tenant);
  98. //We are working entities of new tenant, so changing tenant filter
  99. //var settings = await _settingRepository.GetAllListAsync(a => a.Type > 0);
  100. using (CurrentUnitOfWork.SetTenantId(tenant.Id))
  101. {
  102. //Create static roles for new tenant
  103. var role = Role.CreateStaticRoles(tenant.Id);
  104. CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id, role));
  105. await CurrentUnitOfWork.SaveChangesAsync(); //To get static role ids
  106. //grant all permissions to admin role
  107. var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin);
  108. await _roleManager.GrantAllPermissionsAsync(adminRole);
  109. //Create admin user for the tenant
  110. var adminUser = User.CreateTenantAdminUser(tenant.Id);
  111. CheckErrors(await _userManager.CreateAsync(adminUser));
  112. await CurrentUnitOfWork.SaveChangesAsync(); //To get admin user's id
  113. //Assign admin user to role!
  114. CheckErrors(await _userManager.AddToRoleAsync(adminUser.Id, adminRole.Name));
  115. await CurrentUnitOfWork.SaveChangesAsync();
  116. await SettingManager.ChangeSettingForTenantAsync(tenant.Id, IwbSettingNames.AdminSystemName, tenant.Name);
  117. //foreach (var setting in settings)
  118. //{
  119. // if (setting.Name == SettingNames.AdminSystemName)
  120. // {
  121. // setting.Value = tenant.Name;
  122. // }
  123. //
  124. // if (await _settingRepository.GetAllListAsync(a => a.Name ==setting.Name)==null)
  125. // {
  126. // await _settingRepository.InsertAsync(setting);
  127. // }
  128. //}
  129. }
  130. }
  131. [AbpAuthorize(PermissionNames.PagesSystemMgTenantMgUpdate)]
  132. public override async Task Update(TenantUpdateDto input)
  133. {
  134. await UpdateEntity(input);
  135. }
  136. [AbpAuthorize(PermissionNames.PagesSystemMgTenantMgDelete)]
  137. public override async Task Delete(EntityDto<int> input)
  138. {
  139. var tenant = await _tenantManager.GetByIdAsync(input.Id);
  140. await _tenantManager.DeleteAsync(tenant);
  141. }
  142. #endregion
  143. }
  144. }