|
|
|
@ -28,6 +28,8 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc |
|
|
|
protected ICancellationTokenProvider CancellationTokenProvider { get; } |
|
|
|
protected AbpDistributedCacheOptions CacheOptions { get; } |
|
|
|
|
|
|
|
protected IUnitOfWorkManager UnitOfWorkManager { get; } |
|
|
|
|
|
|
|
public StaticPermissionSaver( |
|
|
|
IStaticPermissionDefinitionStore staticStore, |
|
|
|
IPermissionGroupDefinitionRecordRepository permissionGroupRepository, |
|
|
|
@ -38,8 +40,10 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc |
|
|
|
IApplicationInfoAccessor applicationInfoAccessor, |
|
|
|
IAbpDistributedLock distributedLock, |
|
|
|
IOptions<AbpPermissionOptions> permissionOptions, |
|
|
|
ICancellationTokenProvider cancellationTokenProvider) |
|
|
|
ICancellationTokenProvider cancellationTokenProvider, |
|
|
|
IUnitOfWorkManager unitOfWorkManager) |
|
|
|
{ |
|
|
|
UnitOfWorkManager = unitOfWorkManager; |
|
|
|
StaticStore = staticStore; |
|
|
|
PermissionGroupRepository = permissionGroupRepository; |
|
|
|
PermissionRepository = permissionRepository; |
|
|
|
@ -52,8 +56,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc |
|
|
|
CacheOptions = cacheOptions.Value; |
|
|
|
} |
|
|
|
|
|
|
|
[UnitOfWork] |
|
|
|
public virtual async Task SaveAsync() |
|
|
|
public async Task SaveAsync() |
|
|
|
{ |
|
|
|
await using var applicationLockHandle = await DistributedLock.TryAcquireAsync( |
|
|
|
GetApplicationDistributedLockKey() |
|
|
|
@ -99,19 +102,40 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc |
|
|
|
throw new AbpException("Could not acquire distributed lock for saving static permissions!"); |
|
|
|
} |
|
|
|
|
|
|
|
var hasChangesInGroups = await UpdateChangedPermissionGroupsAsync(permissionGroupRecords); |
|
|
|
var hasChangesInPermissions = await UpdateChangedPermissionsAsync(permissionRecords); |
|
|
|
|
|
|
|
if (hasChangesInGroups ||hasChangesInPermissions) |
|
|
|
using (var unitOfWork = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) |
|
|
|
{ |
|
|
|
await Cache.SetStringAsync( |
|
|
|
GetCommonStampCacheKey(), |
|
|
|
Guid.NewGuid().ToString(), |
|
|
|
new DistributedCacheEntryOptions { |
|
|
|
SlidingExpiration = TimeSpan.FromDays(30) //TODO: Make it configurable?
|
|
|
|
}, |
|
|
|
CancellationTokenProvider.Token |
|
|
|
); |
|
|
|
try |
|
|
|
{ |
|
|
|
var hasChangesInGroups = await UpdateChangedPermissionGroupsAsync(permissionGroupRecords); |
|
|
|
var hasChangesInPermissions = await UpdateChangedPermissionsAsync(permissionRecords); |
|
|
|
|
|
|
|
if (hasChangesInGroups || hasChangesInPermissions) |
|
|
|
{ |
|
|
|
await Cache.SetStringAsync( |
|
|
|
GetCommonStampCacheKey(), |
|
|
|
Guid.NewGuid().ToString(), |
|
|
|
new DistributedCacheEntryOptions { |
|
|
|
SlidingExpiration = TimeSpan.FromDays(30) //TODO: Make it configurable?
|
|
|
|
}, |
|
|
|
CancellationTokenProvider.Token |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
catch |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
await unitOfWork.RollbackAsync(); |
|
|
|
} |
|
|
|
catch |
|
|
|
{ |
|
|
|
/* ignored */ |
|
|
|
} |
|
|
|
|
|
|
|
throw; |
|
|
|
} |
|
|
|
|
|
|
|
await unitOfWork.CompleteAsync(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -136,7 +160,8 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc |
|
|
|
|
|
|
|
foreach (var permissionGroupRecord in permissionGroupRecords) |
|
|
|
{ |
|
|
|
var permissionGroupRecordInDatabase = permissionGroupRecordsInDatabase.GetOrDefault(permissionGroupRecord.Name); |
|
|
|
var permissionGroupRecordInDatabase = |
|
|
|
permissionGroupRecordsInDatabase.GetOrDefault(permissionGroupRecord.Name); |
|
|
|
if (permissionGroupRecordInDatabase == null) |
|
|
|
{ |
|
|
|
/* New group */ |
|
|
|
@ -291,4 +316,4 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc |
|
|
|
.ToString() |
|
|
|
.ToMd5(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |