Browse Source

Serialize PermissionDefinition to PermissionDefinitionRecord

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
215184347f
  1. 21
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionDefinitionSerializer.cs
  2. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDefinitionRecord.cs
  3. 88
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDefinitionSerializer.cs
  4. 62
      modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionDefinitionSerializer_Tests.cs

21
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionDefinitionSerializer.cs

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

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDefinitionRecord.cs

@ -51,7 +51,7 @@ public class PermissionDefinitionRecord : BasicAggregateRoot<Guid>, IHasExtraPro
{
GroupName = Check.NotNullOrWhiteSpace(groupName, nameof(groupName), PermissionGroupDefinitionRecordConsts.MaxNameLength);
Name = Check.NotNullOrWhiteSpace(name, nameof(name), PermissionDefinitionRecordConsts.MaxNameLength);
ParentName = Check.NotNullOrWhiteSpace(parentName, nameof(parentName), PermissionDefinitionRecordConsts.MaxNameLength);
ParentName = Check.Length(parentName, nameof(parentName), PermissionDefinitionRecordConsts.MaxNameLength);
DisplayName = Check.NotNullOrWhiteSpace(displayName, nameof(displayName), PermissionDefinitionRecordConsts.MaxDisplayNameLength);
IsEnabled = isEnabled;
MultiTenancySide = multiTenancySide;

88
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDefinitionSerializer.cs

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

62
modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionDefinitionSerializer_Tests.cs

@ -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…
Cancel
Save