public async Task AfterSave(Int64 UserId, Object beforeData, Object afterData) { var before = beforeData as ExpandoObject; var after = afterData as ExpandoObject; var userId = after.Eval <Int64>("User.Id"); var pwd = before.Eval <String>("User.Password"); String tenantRoles = null; if (_host.IsMultiTenant) { tenantRoles = before.Eval <String>("User.TenantRoles"); var afterUser = after.Get <ExpandoObject>("User"); afterUser.Set("TenantRoles", tenantRoles); } var token = await _userManager.GeneratePasswordResetTokenAsync(userId); var ir = await _userManager.ResetPasswordAsync(userId, token, pwd); if (!ir.Succeeded) { String errors = String.Empty; foreach (var e in ir.Errors) { errors += "\n" + e; } throw new SecurityException("Set password failed." + errors); } var user = await _userManager.FindByIdAsync(userId); user.EmailConfirmed = true; if (tenantRoles != null) { user.TenantRoles = tenantRoles; } user.SetModified(UserModifiedFlag.EmailConfirmed); await _userManager.UpdateAsync(user); if (_host.IsMultiTenant && _host.IsMultiCompany) { var update = new UpdateTenantCompanyHandler(); update.Inject(_host, _dbContext); update.EnableThrow(); update.DisableDtc(); update.Invoke(UserId, 0); } }
public Object Invoke(Int64 UserId, Int64 Id) { if (!_host.IsMultiTenant) { throw new InvalidOperationException("DeleteTenantUser is available only in multitenant environment"); } var prms = new DeleteTenantUserParams() { UserId = UserId, Id = Id, TenantId = _host.TenantId ?? 0 }; var appUser = new AppUser() { Id = Id, Tenant = _host.TenantId ?? 0, CurrentUser = UserId }; var result = new DeleteTeanantUserResult(); void ExecuteSql() { _dbContext.Execute <DeleteTenantUserParams>(_host.TenantDataSource, "a2security_tenant.[DeleteUser]", prms); _dbContext.Execute <DeleteTenantUserParams>(_host.CatalogDataSource, "a2security.[DeleteTenantUser]", prms); //await _userManager.DeleteAsync(appUser); if (_host.IsMultiCompany && _host.IsMultiTenant) { var update = new UpdateTenantCompanyHandler(); update.Inject(_host, _dbContext); update.EnableThrow(); update.DisableDtc(); update.Invoke(UserId, 0); } } try { if (_host.IsDTCEnabled) { // distributed transaction!!!! using (var trans = new TransactionScope(TransactionScopeOption.RequiresNew)) { ExecuteSql(); trans.Complete(); } } else { ExecuteSql(); } result.status = "success"; } catch (Exception ex) { result.status = "error"; if (_host.IsDebugConfiguration) { result.message = ex.Message; } else { result.message = "Unable to delete user"; } } return(result); }