public virtual async Task DeleteAsync(string[] names) { using (var userManager = _userManagerFactory()) { foreach (var name in names) { var dbUser = await userManager.FindByNameAsync(name); if (dbUser != null) { await userManager.DeleteAsync(dbUser); using (var repository = _platformRepository()) { var account = repository.GetAccountByName(name, UserDetails.Reduced); if (account != null) { var userChangedEntry = new ChangedEntry <ApplicationUserExtended>(dbUser.ToCoreModel(account, _permissionScopeService), EntryState.Deleted); repository.Remove(account); await _eventPublisher.Publish(new UserChangingEvent(userChangedEntry)); repository.UnitOfWork.Commit(); await _eventPublisher.Publish(new UserChangedEvent(userChangedEntry)); } } //clear cache ResetCache(dbUser.Id, name); } } } }
public virtual async Task <SecurityResult> CreateAsync(ApplicationUserExtended user) { IdentityResult result; if (user == null) { throw new ArgumentNullException("user"); } NormalizeUser(user); //Update ASP.NET indentity user using (var userManager = _userManagerFactory()) { var dbUser = user.ToIdentityModel(); user.Id = dbUser.Id; if (string.IsNullOrEmpty(user.Password)) { result = await userManager.CreateAsync(dbUser); } else { result = await userManager.CreateAsync(dbUser, user.Password); } } if (result.Succeeded) { using (var repository = _platformRepository()) { var dbAcount = user.ToDataModel(); if (string.IsNullOrEmpty(user.MemberId)) { //Use for memberId same account id if its not set (Our current case Contact member 1 - 1 Account workaround). But client may use memberId as for any outer id. dbAcount.MemberId = dbAcount.Id; } dbAcount.AccountState = AccountState.Approved.ToString(); repository.Add(dbAcount); var userChangedEntry = new ChangedEntry <ApplicationUserExtended>(user, EntryState.Added); await _eventPublisher.Publish(new UserChangingEvent(userChangedEntry)); repository.UnitOfWork.Commit(); await _eventPublisher.Publish(new UserChangedEvent(userChangedEntry)); } } return(result.ToCoreModel()); }
public UserChangedEvent(ChangedEntry <ApplicationUserExtended> changedEntry) { ChangedEntry = changedEntry; }
public virtual async Task <SecurityResult> UpdateAsync(ApplicationUserExtended user) { SecurityResult result; if (user == null) { throw new ArgumentNullException("user"); } NormalizeUser(user); //Update ASP.NET indentity user var userName = string.Empty; ApplicationUser dbUser = null; using (var userManager = _userManagerFactory()) { dbUser = await userManager.FindByIdAsync(user.Id); result = ValidateUser(dbUser); if (result.Succeeded) { userName = dbUser.UserName; //Update ASP.NET indentity user user.Patch(dbUser); var identityResult = await userManager.UpdateAsync(dbUser); result = identityResult.ToCoreModel(); //clear cache ResetCache(user.Id, userName); } } if (result.Succeeded) { //Update platform security user using (var repository = _platformRepository()) { var targetDbAcount = repository.GetAccountByName(userName, UserDetails.Full); if (targetDbAcount == null) { result = new SecurityResult { Errors = new[] { "Account not found." } }; } else { var changedDbAccount = user.ToDataModel(); using (var changeTracker = GetChangeTracker(repository)) { var userChangedEntry = new ChangedEntry <ApplicationUserExtended>(user, dbUser.ToCoreModel(targetDbAcount, _permissionScopeService), EntryState.Modified); changeTracker.Attach(targetDbAcount); changedDbAccount.Patch(targetDbAcount); await _eventPublisher.Publish(new UserChangingEvent(userChangedEntry)); repository.UnitOfWork.Commit(); await _eventPublisher.Publish(new UserChangedEvent(userChangedEntry)); } } } } return(result); }
/// <summary> /// Raises the <see cref="ChangedEntry"/> event. /// </summary> /// <param name="e">An <see cref="DotRas.RasPhoneBookDialogEventArgs"/> containing event data.</param> private void OnChangedEntry(RasPhoneBookDialogEventArgs e) { ChangedEntry?.Invoke(this, e); }