UserRegistrationManager.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Abp.Domain.Services;
  6. using Abp.UI;
  7. using WeApp.Authorization.Roles;
  8. using WeApp.MultiTenancy;
  9. using IwbZero.Authorization.Base.Users;
  10. using IwbZero.IdentityFramework;
  11. using IwbZero.Runtime.Session;
  12. using Microsoft.AspNet.Identity;
  13. namespace WeApp.Authorization.Users
  14. {
  15. public class UserRegistrationManager : DomainService
  16. {
  17. public IIwbSession AbpSession { get; set; }
  18. private readonly TenantManager _tenantManager;
  19. private readonly UserManager _userManager;
  20. private readonly RoleManager _roleManager;
  21. public UserRegistrationManager(
  22. TenantManager tenantManager,
  23. UserManager userManager,
  24. RoleManager roleManager)
  25. {
  26. _tenantManager = tenantManager;
  27. _userManager = userManager;
  28. _roleManager = roleManager;
  29. AbpSession = NullIwbSession.Instance;
  30. }
  31. public async Task<User> RegisterAsync(string name, string surname, string emailAddress, string userName, string plainPassword, bool isEmailConfirmed)
  32. {
  33. CheckForTenant();
  34. var tenant = await GetActiveTenantAsync();
  35. var user = new User
  36. {
  37. TenantId = tenant.Id,
  38. Name = name,
  39. Surname = surname,
  40. EmailAddress = emailAddress,
  41. IsActive = true,
  42. UserName = userName,
  43. IsEmailConfirmed = true,
  44. Roles = new List<UserRole>()
  45. };
  46. user.Password = new PasswordHasher().HashPassword(plainPassword);
  47. foreach (var defaultRole in _roleManager.Roles.Where(r => r.IsDefault).ToList())
  48. {
  49. user.Roles.Add(new UserRole(tenant.Id, user.Id, defaultRole.Id));
  50. }
  51. CheckErrors(await _userManager.CreateAsync(user));
  52. await CurrentUnitOfWork.SaveChangesAsync();
  53. return user;
  54. }
  55. private void CheckForTenant()
  56. {
  57. if (!AbpSession.TenantId.HasValue)
  58. {
  59. throw new InvalidOperationException("Can not register host users!");
  60. }
  61. }
  62. private async Task<Tenant> GetActiveTenantAsync()
  63. {
  64. if (!AbpSession.TenantId.HasValue)
  65. {
  66. return null;
  67. }
  68. return await GetActiveTenantAsync(AbpSession.TenantId.Value);
  69. }
  70. private async Task<Tenant> GetActiveTenantAsync(int tenantId)
  71. {
  72. var tenant = await _tenantManager.FindByIdAsync(tenantId);
  73. if (tenant == null)
  74. {
  75. throw new UserFriendlyException(L("UnknownTenantId{0}", tenantId));
  76. }
  77. if (!tenant.IsActive)
  78. {
  79. throw new UserFriendlyException(L("TenantIdIsNotActive{0}", tenantId));
  80. }
  81. return tenant;
  82. }
  83. protected virtual void CheckErrors(IdentityResult identityResult)
  84. {
  85. identityResult.CheckErrors(LocalizationManager);
  86. }
  87. }
  88. }