Browse Source

CmsKit - Change policies of PolicySpecifiedDefinition to collection

pull/7908/head
enisn 5 years ago
parent
commit
db84676bfd
  1. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs
  2. 35
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminAppServiceBase.cs
  3. 16
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs
  4. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs
  5. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs
  6. 20
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptorDefinition.cs
  7. 38
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/PolicySpecifiedDefinition.cs
  8. 9
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs
  9. 8
      modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs

8
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs

@ -5,13 +5,13 @@ namespace Volo.CmsKit.Permissions
public class CmsKitAdminPermissions
{
public const string GroupName = "CmsKit";
public static class Comments
{
public const string Default = GroupName + ".Comments";
public const string Delete = Default + ".Delete";
}
public static class Tags
{
public const string Default = GroupName + ".Tags";
@ -19,7 +19,7 @@ namespace Volo.CmsKit.Permissions
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
}
public static class Contents
{
public const string Default = GroupName + ".Contents";
@ -52,7 +52,7 @@ namespace Volo.CmsKit.Permissions
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
}
public static class MediaDescriptors
{
public const string Default = GroupName + ".MediaDescriptors";

35
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminAppServiceBase.cs

@ -1,4 +1,13 @@
namespace Volo.CmsKit.Admin
using JetBrains.Annotations;
using Microsoft.AspNetCore.Authorization;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices.ComTypes;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Authorization;
namespace Volo.CmsKit.Admin
{
public abstract class CmsKitAdminAppServiceBase : CmsKitAppServiceBase
{
@ -6,5 +15,29 @@
{
ObjectMapperContext = typeof(CmsKitAdminApplicationModule);
}
/// <summary>
/// Checks given policies until finding granted policy. If none of them is granted, throws <see cref="AbpAuthorizationException"/>
/// </summary>
/// <param name="policies">Policies to be checked.</param>
/// <exception cref="AbpAuthorizationException">Thrown when none of policies is granted.</exception>
protected async Task CheckAnyOfPoliciesAsync([NotNull] IEnumerable<string> policies)
{
Check.NotNull(policies, nameof(policies));
foreach (var policy in policies)
{
if (await AuthorizationService.IsGrantedAsync(policy))
{
return;
}
}
var exception = new AbpAuthorizationException();
exception.Data[nameof(policies)] = policies;
throw exception;
}
}
}

16
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs

@ -46,9 +46,9 @@ namespace Volo.CmsKit.Admin
new TagEntityTypeDefiniton(
BlogPostConsts.EntityType,
LocalizableString.Create<CmsKitResource>("BlogPost"),
CmsKitAdminPermissions.BlogPosts.Update,
CmsKitAdminPermissions.BlogPosts.Update,
CmsKitAdminPermissions.BlogPosts.Update));
new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update },
new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update },
new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update }));
}
});
@ -60,9 +60,9 @@ namespace Volo.CmsKit.Admin
{
options.EntityTypes.AddIfNotContains(
new MediaDescriptorDefinition(
BlogPostConsts.EntityType,
createPolicy: CmsKitAdminPermissions.BlogPosts.Update,
deletePolicy: CmsKitAdminPermissions.BlogPosts.Delete));
BlogPostConsts.EntityType,
createPolicies: new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update },
deletePolicies: new[] { CmsKitAdminPermissions.BlogPosts.Delete }));
}
if (GlobalFeatureManager.Instance.IsEnabled<PagesFeature>())
@ -70,8 +70,8 @@ namespace Volo.CmsKit.Admin
options.EntityTypes.AddIfNotContains(
new MediaDescriptorDefinition(
PageConsts.EntityType,
createPolicy: CmsKitAdminPermissions.Pages.Update,
deletePolicy: CmsKitAdminPermissions.Pages.Delete));
createPolicies: new[] { CmsKitAdminPermissions.Pages.Create, CmsKitAdminPermissions.Pages.Update },
deletePolicies: new[] { CmsKitAdminPermissions.Pages.Delete }));
}
});
}

4
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs

@ -35,7 +35,7 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
{
var definition = await MediaDescriptorDefinitionStore.GetDefinitionAsync(inputStream.EntityType);
await CheckPolicyAsync(definition.CreatePolicy);
await CheckAnyOfPoliciesAsync(definition.CreatePolicies);
var newId = GuidGenerator.Create();
using (var stream = inputStream.GetStream())
@ -56,7 +56,7 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
var definition = await MediaDescriptorDefinitionStore.GetDefinitionAsync(mediaDescriptor.EntityType);
await CheckPolicyAsync(definition.DeletePolicy);
await CheckAnyOfPoliciesAsync(definition.DeletePolicies);
await MediaContainer.DeleteAsync(id.ToString());
await MediaDescriptorRepository.DeleteAsync(id);

6
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs

@ -31,7 +31,7 @@ namespace Volo.CmsKit.Admin.Tags
{
var definition = await TagDefinitionStore.GetTagEntityTypeDefinitionAsync(input.EntityType);
await CheckPolicyAsync(definition.CreatePolicy);
await CheckAnyOfPoliciesAsync(definition.CreatePolicies);
var tag = await TagManager.GetOrAddAsync(input.EntityType, input.TagName);
@ -46,7 +46,7 @@ namespace Volo.CmsKit.Admin.Tags
{
var definition = await TagDefinitionStore.GetTagEntityTypeDefinitionAsync(input.EntityType);
await CheckPolicyAsync(definition.DeletePolicy);
await CheckAnyOfPoliciesAsync(definition.DeletePolicies);
await EntityTagManager.RemoveTagFromEntityAsync(
input.TagId,
@ -59,7 +59,7 @@ namespace Volo.CmsKit.Admin.Tags
{
var definition = await TagDefinitionStore.GetTagEntityTypeDefinitionAsync(input.EntityType);
await CheckPolicyAsync(definition.UpdatePolicy);
await CheckAnyOfPoliciesAsync(definition.UpdatePolicies);
await EntityTagManager.SetEntityTagsAsync(input.EntityType, input.EntityId, input.Tags);
}

20
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptorDefinition.cs

@ -1,24 +1,20 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
namespace Volo.CmsKit.MediaDescriptors
{
public class MediaDescriptorDefinition : PolicySpecifiedDefinition, IEquatable<MediaDescriptorDefinition>
public class MediaDescriptorDefinition : PolicySpecifiedDefinition
{
public MediaDescriptorDefinition(
[NotNull] string entityType,
[CanBeNull] string createPolicy = null,
[CanBeNull] string updatePolicy = null,
[CanBeNull] string deletePolicy = null) : base(entityType,
createPolicy,
updatePolicy,
deletePolicy)
IEnumerable<string> createPolicies = null,
IEnumerable<string> updatePolicies = null,
IEnumerable<string> deletePolicies = null) : base(entityType,
createPolicies,
updatePolicies,
deletePolicies)
{
}
public bool Equals(MediaDescriptorDefinition other)
{
return base.Equals(other);
}
}
}

38
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/PolicySpecifiedDefinition.cs

@ -1,5 +1,7 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp;
namespace Volo.CmsKit
@ -12,27 +14,39 @@ namespace Volo.CmsKit
public PolicySpecifiedDefinition(
[NotNull] string entityType,
[CanBeNull] string createPolicy = null,
[CanBeNull] string updatePolicy = null,
[CanBeNull] string deletePolicy = null)
IEnumerable<string> createPolicies = null,
IEnumerable<string> updatePolicies = null,
IEnumerable<string> deletePolicies = null)
{
EntityType = Check.NotNullOrEmpty(entityType, nameof(entityType));
CreatePolicy = createPolicy;
DeletePolicy = deletePolicy;
UpdatePolicy = updatePolicy;
if (createPolicies != null)
{
CreatePolicies = CreatePolicies.Concat(createPolicies).ToList();
}
if (updatePolicies != null)
{
UpdatePolicies = UpdatePolicies.Concat(updatePolicies).ToList();
}
if (deletePolicies != null)
{
DeletePolicies = DeletePolicies.Concat(deletePolicies).ToList();
}
}
[NotNull]
public string EntityType { get; set; }
[CanBeNull]
public virtual string CreatePolicy { get; set; }
[NotNull]
public virtual ICollection<string> CreatePolicies { get; } = new List<string>();
[CanBeNull]
public virtual string UpdatePolicy { get; set; }
[NotNull]
public virtual ICollection<string> UpdatePolicies { get; } = new List<string>();
[CanBeNull]
public virtual string DeletePolicy { get; set; }
[NotNull]
public virtual ICollection<string> DeletePolicies { get; } = new List<string>();
public bool Equals(PolicySpecifiedDefinition other)
{

9
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs

@ -1,5 +1,6 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using Volo.Abp;
using Volo.Abp.Localization;
@ -17,12 +18,12 @@ namespace Volo.CmsKit.Tags
public TagEntityTypeDefiniton(
[NotNull] string entityType,
[CanBeNull] ILocalizableString displayName = null,
[CanBeNull] string createPolicy = null,
[CanBeNull] string updatePolicy = null,
[CanBeNull] string deletePolicy = null) : base(entityType, createPolicy, updatePolicy, deletePolicy)
IEnumerable<string> createPolicies = null,
IEnumerable<string> updatePolicies = null,
IEnumerable<string> deletePolicies = null) : base(entityType, createPolicies, updatePolicies, deletePolicies)
{
EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
DisplayName = displayName;
}
public bool Equals(TagEntityTypeDefiniton other)

8
modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs

@ -42,11 +42,11 @@ namespace Volo.CmsKit.Tags
{
cmsKitTagOptions.EntityTypes.Add(
new TagEntityTypeDefiniton(
"My.Entity.Type",
"My.Entity.Type",
LocalizableString.Create<CmsKitResource>("MyEntity"),
"SomeCreatePolicy",
"SomeUpdatePolicy",
"SomeDeletePolicy"
new[] { "SomeCreatePolicy" },
new[] { "SomeUpdatePolicy" },
new[] { "SomeDeletePolicy" }
));
}

Loading…
Cancel
Save