mirror of https://github.com/abpframework/abp.git
4 changed files with 172 additions and 1 deletions
@ -0,0 +1,21 @@ |
|||
using System.Threading.Tasks; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Authorization.Permissions; |
|||
|
|||
namespace Volo.Abp.PermissionManagement; |
|||
|
|||
public interface IPermissionDefinitionSerializer |
|||
{ |
|||
public Task<PermissionDefinitionRecord> SerializeAsync( |
|||
PermissionDefinition permission, |
|||
[CanBeNull] PermissionGroupDefinition permissionGroup); |
|||
|
|||
public Task<PermissionDefinition> DeserializeAsync( |
|||
PermissionDefinitionRecord permissionRecord); |
|||
|
|||
public Task<PermissionGroupDefinitionRecord> SerializeAsync( |
|||
PermissionGroupDefinition permissionGroup); |
|||
|
|||
public Task<PermissionGroupDefinition> DeserializeAsync( |
|||
PermissionGroupDefinitionRecord permissionGroupRecord); |
|||
} |
|||
@ -0,0 +1,88 @@ |
|||
using System.Collections.Generic; |
|||
using System.Globalization; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.Localization; |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Guids; |
|||
using Volo.Abp.Localization; |
|||
using Volo.Abp.SimpleStateChecking; |
|||
|
|||
namespace Volo.Abp.PermissionManagement; |
|||
|
|||
public class PermissionDefinitionSerializer : IPermissionDefinitionSerializer, ITransientDependency |
|||
{ |
|||
protected IGuidGenerator GuidGenerator { get; } |
|||
protected IStringLocalizerFactory StringLocalizerFactory { get; } |
|||
|
|||
public PermissionDefinitionSerializer( |
|||
IGuidGenerator guidGenerator, |
|||
IStringLocalizerFactory stringLocalizerFactory) |
|||
{ |
|||
GuidGenerator = guidGenerator; |
|||
StringLocalizerFactory = stringLocalizerFactory; |
|||
} |
|||
|
|||
public Task<PermissionDefinitionRecord> SerializeAsync( |
|||
PermissionDefinition permission, |
|||
PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
using (CultureHelper.Use(CultureInfo.InvariantCulture)) |
|||
{ |
|||
var permissionRecord = new PermissionDefinitionRecord( |
|||
GuidGenerator.Create(), |
|||
permissionGroup?.Name, |
|||
permission.Name, |
|||
permission.Parent?.Name, |
|||
permission.DisplayName.Localize(StringLocalizerFactory), |
|||
permission.IsEnabled, |
|||
permission.MultiTenancySide, |
|||
SerializeProviders(permission.Providers), |
|||
SerializeStateCheckers(permission.StateCheckers) |
|||
); |
|||
|
|||
foreach (var property in permission.Properties) |
|||
{ |
|||
permissionRecord.SetProperty(property.Key, property.Value); |
|||
} |
|||
|
|||
return Task.FromResult(permissionRecord); |
|||
} |
|||
} |
|||
|
|||
public Task<PermissionDefinition> DeserializeAsync(PermissionDefinitionRecord permissionRecord) |
|||
{ |
|||
throw new System.NotImplementedException(); |
|||
} |
|||
|
|||
public Task<PermissionGroupDefinitionRecord> SerializeAsync(PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
throw new System.NotImplementedException(); |
|||
} |
|||
|
|||
public Task<PermissionGroupDefinition> DeserializeAsync(PermissionGroupDefinitionRecord permissionGroupRecord) |
|||
{ |
|||
throw new System.NotImplementedException(); |
|||
} |
|||
|
|||
protected virtual string SerializeStateCheckers(IEnumerable<ISimpleStateChecker<PermissionDefinition>> stateCheckers) |
|||
{ |
|||
//TODO: Serialize state checker
|
|||
|
|||
if(!stateCheckers.Any()) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return null; |
|||
} |
|||
|
|||
protected virtual string SerializeProviders(ICollection<string> providers) |
|||
{ |
|||
return providers.Any() |
|||
? providers.JoinAsString(",") |
|||
: null; |
|||
} |
|||
} |
|||
@ -0,0 +1,62 @@ |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.Localization; |
|||
using Volo.Abp.MultiTenancy; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.PermissionManagement; |
|||
|
|||
public class PermissionDefinitionSerializer_Tests : PermissionTestBase |
|||
{ |
|||
private readonly IPermissionDefinitionSerializer _serializer; |
|||
|
|||
public PermissionDefinitionSerializer_Tests() |
|||
{ |
|||
_serializer = GetRequiredService<IPermissionDefinitionSerializer>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Serialize_Permission_Definitions() |
|||
{ |
|||
// Arrange
|
|||
|
|||
var context = new PermissionDefinitionContext(null); |
|||
var group1 = CreatePermissionGroup1(context); |
|||
var permission1 = group1.AddPermission( |
|||
"Permission1", |
|||
new FixedLocalizableString("Permission one"), |
|||
MultiTenancySides.Tenant |
|||
); |
|||
|
|||
permission1["CustomProperty2"] = "CustomValue2"; |
|||
|
|||
// Act
|
|||
|
|||
var permissionRecord = await _serializer.SerializeAsync( |
|||
group1.GetPermissionOrNull("Permission1"), |
|||
group1 |
|||
); |
|||
|
|||
//Assert
|
|||
|
|||
permissionRecord.Name.ShouldBe("Permission1"); |
|||
permissionRecord.GroupName.ShouldBe("Group1"); |
|||
permissionRecord.DisplayName.ShouldBe("Permission one"); |
|||
permissionRecord.GetProperty("CustomProperty2").ShouldBe("CustomValue2"); |
|||
} |
|||
|
|||
private static PermissionGroupDefinition CreatePermissionGroup1( |
|||
IPermissionDefinitionContext context) |
|||
{ |
|||
var group = context.AddGroup( |
|||
"Group1", |
|||
displayName: new FixedLocalizableString("Group one") |
|||
); |
|||
|
|||
group["CustomProperty1"] = "CustomValue1"; |
|||
|
|||
return group; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue