Merge pull request #1736 from abpframework/maliming/patch-2

Add IIdentityStoreAutoSaveChanges.
pull/1775/head
Halil İbrahim Kalkan 6 years ago committed by GitHub
commit c63644d2e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -41,44 +41,54 @@ namespace Volo.Abp.Identity
[Authorize(IdentityPermissions.Roles.Create)]
public async Task<IdentityRoleDto> CreateAsync(IdentityRoleCreateDto input)
{
var role = new IdentityRole(GuidGenerator.Create(), input.Name, CurrentTenant.Id);
using (_roleManager.AutoSaveRoleChanges(false))
{
var role = new IdentityRole(GuidGenerator.Create(), input.Name, CurrentTenant.Id);
role.IsDefault = input.IsDefault;
role.IsPublic = input.IsPublic;
role.IsDefault = input.IsDefault;
role.IsPublic = input.IsPublic;
(await _roleManager.CreateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
(await _roleManager.CreateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
}
}
[Authorize(IdentityPermissions.Roles.Update)]
public async Task<IdentityRoleDto> UpdateAsync(Guid id, IdentityRoleUpdateDto input)
{
var role = await _roleManager.GetByIdAsync(id);
role.ConcurrencyStamp = input.ConcurrencyStamp;
using (_roleManager.AutoSaveRoleChanges(false))
{
var role = await _roleManager.GetByIdAsync(id);
role.ConcurrencyStamp = input.ConcurrencyStamp;
(await _roleManager.SetRoleNameAsync(role, input.Name)).CheckErrors();
(await _roleManager.SetRoleNameAsync(role, input.Name)).CheckErrors();
role.IsDefault = input.IsDefault;
role.IsPublic = input.IsPublic;
role.IsDefault = input.IsDefault;
role.IsPublic = input.IsPublic;
(await _roleManager.UpdateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
(await _roleManager.UpdateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
}
}
[Authorize(IdentityPermissions.Roles.Delete)]
public async Task DeleteAsync(Guid id)
{
var role = await _roleManager.FindByIdAsync(id.ToString());
if (role == null)
using (_roleManager.AutoSaveRoleChanges(false))
{
return;
var role = await _roleManager.FindByIdAsync(id.ToString());
if (role == null)
{
return;
}
(await _roleManager.DeleteAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
}
(await _roleManager.DeleteAsync(role)).CheckErrors();
}
}
}

@ -53,45 +53,55 @@ namespace Volo.Abp.Identity
[Authorize(IdentityPermissions.Users.Create)]
public async Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input)
{
var user = new IdentityUser(GuidGenerator.Create(), input.UserName, input.Email, CurrentTenant.Id);
using (_userManager.AutoSaveUserChanges(false))
{
var user = new IdentityUser(GuidGenerator.Create(), input.UserName, input.Email, CurrentTenant.Id);
(await _userManager.CreateAsync(user, input.Password)).CheckErrors();
await UpdateUserByInput(user, input);
(await _userManager.CreateAsync(user, input.Password)).CheckErrors();
await UpdateUserByInput(user, input);
await CurrentUnitOfWork.SaveChangesAsync();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
}
}
[Authorize(IdentityPermissions.Users.Update)]
public async Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input)
{
var user = await _userManager.GetByIdAsync(id);
user.ConcurrencyStamp = input.ConcurrencyStamp;
using (_userManager.AutoSaveUserChanges(false))
{
var user = await _userManager.GetByIdAsync(id);
user.ConcurrencyStamp = input.ConcurrencyStamp;
(await _userManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
await UpdateUserByInput(user, input);
(await _userManager.UpdateAsync(user)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
(await _userManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
await UpdateUserByInput(user, input);
(await _userManager.UpdateAsync(user)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
}
}
[Authorize(IdentityPermissions.Users.Delete)]
public async Task DeleteAsync(Guid id)
{
if (CurrentUser.Id == id)
using (_userManager.AutoSaveUserChanges(false))
{
throw new BusinessException(code: IdentityErrorCodes.UserSelfDeletion);
if (CurrentUser.Id == id)
{
throw new BusinessException(code: IdentityErrorCodes.UserSelfDeletion);
}
var user = await _userManager.FindByIdAsync(id.ToString());
if (user == null)
{
return;
}
(await _userManager.DeleteAsync(user)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
}
var user = await _userManager.FindByIdAsync(id.ToString());
if (user == null)
{
return;
}
(await _userManager.DeleteAsync(user)).CheckErrors();
}
[Authorize(IdentityPermissions.Users.Update)]

@ -0,0 +1,7 @@
namespace Volo.Abp.Identity
{
public interface IIdentityStoreAutoSaveChanges
{
bool AutoSaveChanges { get; set; }
}
}

@ -69,5 +69,20 @@ namespace Volo.Abp.Identity
return await base.DeleteAsync(role);
}
public IDisposable AutoSaveRoleChanges(bool autoSaveChanges)
{
if (!(Store is IIdentityStoreAutoSaveChanges store))
{
throw new InvalidOperationException(Store.GetType().FullName + " does not support AutoSaveChanges");
}
var currentAutoSaveChanges = store.AutoSaveChanges;
store.AutoSaveChanges = autoSaveChanges;
return new DisposeAction(() =>
{
store.AutoSaveChanges = currentAutoSaveChanges;
});
}
}
}

@ -20,6 +20,7 @@ namespace Volo.Abp.Identity
public class IdentityRoleStore :
IRoleStore<IdentityRole>,
IRoleClaimStore<IdentityRole>,
IIdentityStoreAutoSaveChanges,
ITransientDependency
{
private readonly IIdentityRoleRepository _roleRepository;

@ -75,5 +75,20 @@ namespace Volo.Abp.Identity
return IdentityResult.Success;
}
public IDisposable AutoSaveUserChanges(bool autoSaveChanges)
{
if (!(Store is IIdentityStoreAutoSaveChanges store))
{
throw new InvalidOperationException(Store.GetType().FullName + " does not support AutoSaveChanges");
}
var currentAutoSaveChanges = store.AutoSaveChanges;
store.AutoSaveChanges = autoSaveChanges;
return new DisposeAction(() =>
{
store.AutoSaveChanges = currentAutoSaveChanges;
});
}
}
}

@ -31,6 +31,7 @@ namespace Volo.Abp.Identity
IUserAuthenticationTokenStore<IdentityUser>,
IUserAuthenticatorKeyStore<IdentityUser>,
IUserTwoFactorRecoveryCodeStore<IdentityUser>,
IIdentityStoreAutoSaveChanges,
ITransientDependency
{
private const string InternalLoginProvider = "[AspNetUserStore]";

Loading…
Cancel
Save