Browse Source

Implemented PermissionsSimpleStateCheckerSerializerContributor and revised serializing.

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
9987b0650e
  1. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/AuthenticatedSimpleStateCheckerSerializerContributor.cs
  2. 62
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionsSimpleStateCheckerSerializerContributor.cs
  3. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleStateChecker.cs
  4. 2
      framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/ISimpleStateCheckerSerializer.cs
  5. 2
      framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/ISimpleStateCheckerSerializerContributor.cs
  6. 4
      framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/SimpleStateCheckerSerializer.cs
  7. 7
      framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/SimpleStateCheckerSerializerExtensions.cs
  8. 2
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeaturesSimpleStateCheckerSerializerContributor.cs
  9. 2
      framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeaturesSimpleStateCheckerSerializerContributor.cs
  10. 2
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AuthenticatedSimpleStateCheckerSerializerContributor_Tests.cs
  11. 2
      framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeaturesSimpleStateCheckerSerializerContributor_Tests.cs
  12. 2
      framework/test/Volo.Abp.GlobalFeatures.Tests/Volo/Abp/GlobalFeatures/GlobalFeaturesSimpleStateCheckerSerializerContributor_Tests.cs
  13. 5
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs
  14. 6
      modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo/Abp/PermissionManagement/PermissionDefinitionSerializer_Tests.cs

4
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/AuthenticatedSimpleStateCheckerSerializerContributor.cs

@ -13,7 +13,7 @@ public class AuthenticatedSimpleStateCheckerSerializerContributor :
public string SerializeToJson<TState>(ISimpleStateChecker<TState> checker)
where TState : IHasSimpleStateCheckers<TState>
{
if (checker is not RequireAuthenticatedSimpleStateChecker<TState> requireAuthenticatedSimpleStateChecker)
if (checker is not RequireAuthenticatedSimpleStateChecker<TState>)
{
return null;
}
@ -25,7 +25,7 @@ public class AuthenticatedSimpleStateCheckerSerializerContributor :
return jsonObject.ToJsonString();
}
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject)
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject, TState state)
where TState : IHasSimpleStateCheckers<TState>
{
if (jsonObject["T"]?.ToString() != CheckerShortName)

62
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionsSimpleStateCheckerSerializerContributor.cs

@ -0,0 +1,62 @@
using System.Linq;
using System.Text.Json.Nodes;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.DependencyInjection;
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.GlobalFeatures;
public class PermissionsSimpleStateCheckerSerializerContributor :
ISimpleStateCheckerSerializerContributor,
ISingletonDependency
{
public const string CheckerShortName = "P";
public string SerializeToJson<TState>(ISimpleStateChecker<TState> checker)
where TState : IHasSimpleStateCheckers<TState>
{
if (checker is not RequirePermissionsSimpleStateChecker<TState> permissionsSimpleStateChecker)
{
return null;
}
var jsonObject = new JsonObject {
["T"] = CheckerShortName,
["A"] = permissionsSimpleStateChecker.RequiresAll
};
var nameArray = new JsonArray();
foreach (var permissionName in permissionsSimpleStateChecker.PermissionNames)
{
nameArray.Add(permissionName);
}
jsonObject["N"] = nameArray;
return jsonObject.ToJsonString();
}
public ISimpleStateChecker<TState> Deserialize<TState>(
JsonObject jsonObject,
TState state)
where TState : IHasSimpleStateCheckers<TState>
{
if (jsonObject["T"]?.ToString() != CheckerShortName)
{
return null;
}
var nameArray = jsonObject["N"] as JsonArray;
if (nameArray == null)
{
throw new AbpException("'N' is not an array in the serialized state checker! JsonObject: " + jsonObject.ToJsonString());
}
return new RequirePermissionsSimpleStateChecker<TState>(
new RequirePermissionsSimpleBatchStateCheckerModel<TState>(
state,
nameArray.Select(x => x.ToString()).ToArray(),
(bool?)jsonObject["A"] ?? false
)
);
}
}

4
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleStateChecker.cs

@ -8,6 +8,10 @@ namespace Volo.Abp.Authorization.Permissions;
public class RequirePermissionsSimpleStateChecker<TState> : ISimpleStateChecker<TState>
where TState : IHasSimpleStateCheckers<TState>
{
public bool RequiresAll => _model.RequiresAll;
public string[] PermissionNames => _model.Permissions;
private readonly RequirePermissionsSimpleBatchStateCheckerModel<TState> _model;
public RequirePermissionsSimpleStateChecker(RequirePermissionsSimpleBatchStateCheckerModel<TState> model)

2
framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/ISimpleStateCheckerSerializer.cs

@ -7,6 +7,6 @@ public interface ISimpleStateCheckerSerializer
public string Serialize<TState>(ISimpleStateChecker<TState> checker)
where TState : IHasSimpleStateCheckers<TState>;
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject)
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject, TState state)
where TState : IHasSimpleStateCheckers<TState>;
}

2
framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/ISimpleStateCheckerSerializerContributor.cs

@ -10,6 +10,6 @@ public interface ISimpleStateCheckerSerializerContributor
where TState : IHasSimpleStateCheckers<TState>;
[CanBeNull]
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject)
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject, TState state)
where TState : IHasSimpleStateCheckers<TState>;
}

4
framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/SimpleStateCheckerSerializer.cs

@ -33,12 +33,12 @@ public class SimpleStateCheckerSerializer :
}
[CanBeNull]
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject)
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject, TState state)
where TState : IHasSimpleStateCheckers<TState>
{
foreach (var contributor in _contributors)
{
var result = contributor.Deserialize<TState>(jsonObject);
var result = contributor.Deserialize(jsonObject, state);
if (result != null)
{
return result;

7
framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/SimpleStateCheckerSerializerExtensions.cs

@ -41,7 +41,8 @@ public static class SimpleStateCheckerSerializerExtensions
public static ISimpleStateChecker<TState>[] DeserializeArray<TState>(
this ISimpleStateCheckerSerializer serializer,
string value)
string value,
TState state)
where TState : IHasSimpleStateCheckers<TState>
{
if (value.IsNullOrWhiteSpace())
@ -63,7 +64,7 @@ public static class SimpleStateCheckerSerializerExtensions
throw new AbpException("JSON value is not an array of objects: " + value);
}
var checker = serializer.Deserialize<TState>(jsonObject);
var checker = serializer.Deserialize(jsonObject, state);
if (checker == null)
{
return Array.Empty<ISimpleStateChecker<TState>>();
@ -81,7 +82,7 @@ public static class SimpleStateCheckerSerializerExtensions
throw new AbpException("JSON value is not an array of objects: " + value);
}
checkers[i] = serializer.Deserialize<TState>(jsonObject);
checkers[i] = serializer.Deserialize(jsonObject, state);
}
return checkers.Where(x => x != null).ToArray();

2
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeaturesSimpleStateCheckerSerializerContributor.cs

@ -34,7 +34,7 @@ public class FeaturesSimpleStateCheckerSerializerContributor :
return jsonObject.ToJsonString();
}
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject)
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject, TState state)
where TState : IHasSimpleStateCheckers<TState>
{
if (jsonObject["T"]?.ToString() != CheckerShortName)

2
framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/GlobalFeaturesSimpleStateCheckerSerializerContributor.cs

@ -34,7 +34,7 @@ public class GlobalFeaturesSimpleStateCheckerSerializerContributor :
return jsonObject.ToJsonString();
}
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject)
public ISimpleStateChecker<TState> Deserialize<TState>(JsonObject jsonObject, TState state)
where TState : IHasSimpleStateCheckers<TState>
{
if (jsonObject["T"]?.ToString() != CheckerShortName)

2
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AuthenticatedSimpleStateCheckerSerializerContributor_Tests.cs

@ -27,7 +27,7 @@ public class AuthenticatedSimpleStateCheckerSerializerContributor_Tests
var serializer = new AuthenticatedSimpleStateCheckerSerializerContributor();
var jsonObject = (JsonObject)JsonNode.Parse("{\"T\":\"A\"}");
var checker = serializer.Deserialize<MyState>(jsonObject);
var checker = serializer.Deserialize(jsonObject, new MyState());
checker.ShouldBeOfType<RequireAuthenticatedSimpleStateChecker<MyState>>();
var globalFeaturesSimpleStateChecker = checker as RequireAuthenticatedSimpleStateChecker<MyState>;

2
framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeaturesSimpleStateCheckerSerializerContributor_Tests.cs

@ -29,7 +29,7 @@ public class FeaturesSimpleStateCheckerSerializerContributor_Tests
var serializer = new FeaturesSimpleStateCheckerSerializerContributor();
var jsonObject = (JsonObject)JsonNode.Parse("{\"T\":\"F\",\"A\":true,\"N\":[\"FeatureA\",\"FeatureB\"]}");
var checker = serializer.Deserialize<MyState>(jsonObject);
var checker = serializer.Deserialize<MyState>(jsonObject, new MyState());
checker.ShouldBeOfType<RequireFeaturesSimpleStateChecker<MyState>>();
var globalFeaturesSimpleStateChecker = checker as RequireFeaturesSimpleStateChecker<MyState>;

2
framework/test/Volo.Abp.GlobalFeatures.Tests/Volo/Abp/GlobalFeatures/GlobalFeaturesSimpleStateCheckerSerializerContributor_Tests.cs

@ -29,7 +29,7 @@ public class GlobalFeaturesSimpleStateCheckerSerializerContributor_Tests
var serializer = new GlobalFeaturesSimpleStateCheckerSerializerContributor();
var jsonObject = (JsonObject)JsonNode.Parse("{\"T\":\"G\",\"A\":true,\"N\":[\"FeatureA\",\"FeatureB\"]}");
var checker = serializer.Deserialize<MyState>(jsonObject);
var checker = serializer.Deserialize<MyState>(jsonObject, new MyState());
checker.ShouldBeOfType<RequireGlobalFeaturesSimpleStateChecker<MyState>>();
var globalFeaturesSimpleStateChecker = checker as RequireGlobalFeaturesSimpleStateChecker<MyState>;

5
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs

@ -100,8 +100,9 @@ public class DynamicPermissionDefinitionStoreInMemoryCache :
if (!permissionRecord.StateCheckers.IsNullOrWhiteSpace())
{
var checkers = StateCheckerSerializer
.DeserializeArray<PermissionDefinition>(
permissionRecord.StateCheckers
.DeserializeArray(
permissionRecord.StateCheckers,
permission
);
permission.StateCheckers.AddRange(checkers);
}

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

@ -54,7 +54,9 @@ public class PermissionDefinitionSerializer_Tests : PermissionTestBase
)
.WithProviders("ProviderA", "ProviderB")
.WithProperty("CustomProperty2", "CustomValue2")
.RequireGlobalFeatures("GlobalFeature1", "GlobalFeature2");
.RequireAuthenticated() //For for testing, not so meaningful
.RequireGlobalFeatures("GlobalFeature1", "GlobalFeature2")
.RequireFeatures("Feature1", "Feature2");
// Act
@ -71,7 +73,7 @@ public class PermissionDefinitionSerializer_Tests : PermissionTestBase
permissionRecord.GetProperty("CustomProperty2").ShouldBe("CustomValue2");
permissionRecord.Providers.ShouldBe("ProviderA,ProviderB");
permissionRecord.MultiTenancySide.ShouldBe(MultiTenancySides.Tenant);
permissionRecord.StateCheckers.ShouldBe("[{\"T\":\"GF\",\"A\":true,\"N\":[\"GlobalFeature1\",\"GlobalFeature2\"]}]");
permissionRecord.StateCheckers.ShouldBe("[{\"T\":\"A\"},{\"T\":\"G\",\"A\":true,\"N\":[\"GlobalFeature1\",\"GlobalFeature2\"]},{\"T\":\"F\",\"A\":true,\"N\":[\"Feature1\",\"Feature2\"]}]");
}
private static PermissionGroupDefinition CreatePermissionGroup1(

Loading…
Cancel
Save