| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Abp.Domain.Services;
- using Abp.UI;
- using WeApp.Authorization.Roles;
- using WeApp.MultiTenancy;
- using IwbZero.Authorization.Base.Users;
- using IwbZero.IdentityFramework;
- using IwbZero.Runtime.Session;
- using Microsoft.AspNet.Identity;
- namespace WeApp.Authorization.Users
- {
- public class UserRegistrationManager : DomainService
- {
- public IIwbSession AbpSession { get; set; }
- private readonly TenantManager _tenantManager;
- private readonly UserManager _userManager;
- private readonly RoleManager _roleManager;
- public UserRegistrationManager(
- TenantManager tenantManager,
- UserManager userManager,
- RoleManager roleManager)
- {
- _tenantManager = tenantManager;
- _userManager = userManager;
- _roleManager = roleManager;
- AbpSession = NullIwbSession.Instance;
- }
- public async Task<User> RegisterAsync(string name, string surname, string emailAddress, string userName, string plainPassword, bool isEmailConfirmed)
- {
- CheckForTenant();
- var tenant = await GetActiveTenantAsync();
- var user = new User
- {
- TenantId = tenant.Id,
- Name = name,
- Surname = surname,
- EmailAddress = emailAddress,
- IsActive = true,
- UserName = userName,
- IsEmailConfirmed = true,
- Roles = new List<UserRole>()
- };
- user.Password = new PasswordHasher().HashPassword(plainPassword);
- foreach (var defaultRole in _roleManager.Roles.Where(r => r.IsDefault).ToList())
- {
- user.Roles.Add(new UserRole(tenant.Id, user.Id, defaultRole.Id));
- }
- CheckErrors(await _userManager.CreateAsync(user));
- await CurrentUnitOfWork.SaveChangesAsync();
- return user;
- }
- private void CheckForTenant()
- {
- if (!AbpSession.TenantId.HasValue)
- {
- throw new InvalidOperationException("Can not register host users!");
- }
- }
- private async Task<Tenant> GetActiveTenantAsync()
- {
- if (!AbpSession.TenantId.HasValue)
- {
- return null;
- }
- return await GetActiveTenantAsync(AbpSession.TenantId.Value);
- }
- private async Task<Tenant> GetActiveTenantAsync(int tenantId)
- {
- var tenant = await _tenantManager.FindByIdAsync(tenantId);
- if (tenant == null)
- {
- throw new UserFriendlyException(L("UnknownTenantId{0}", tenantId));
- }
- if (!tenant.IsActive)
- {
- throw new UserFriendlyException(L("TenantIdIsNotActive{0}", tenantId));
- }
- return tenant;
- }
- protected virtual void CheckErrors(IdentityResult identityResult)
- {
- identityResult.CheckErrors(LocalizationManager);
- }
- }
- }
|