|
|
|
@ -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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|