Browse Source

CmsKit - Change policies of PolicySpecifiedDefinition to collection

pull/7908/head
enisn 6 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 class CmsKitAdminPermissions
{ {
public const string GroupName = "CmsKit"; public const string GroupName = "CmsKit";
public static class Comments public static class Comments
{ {
public const string Default = GroupName + ".Comments"; public const string Default = GroupName + ".Comments";
public const string Delete = Default + ".Delete"; public const string Delete = Default + ".Delete";
} }
public static class Tags public static class Tags
{ {
public const string Default = GroupName + ".Tags"; public const string Default = GroupName + ".Tags";
@ -19,7 +19,7 @@ namespace Volo.CmsKit.Permissions
public const string Update = Default + ".Update"; public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete"; public const string Delete = Default + ".Delete";
} }
public static class Contents public static class Contents
{ {
public const string Default = GroupName + ".Contents"; public const string Default = GroupName + ".Contents";
@ -52,7 +52,7 @@ namespace Volo.CmsKit.Permissions
public const string Update = Default + ".Update"; public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete"; public const string Delete = Default + ".Delete";
} }
public static class MediaDescriptors public static class MediaDescriptors
{ {
public const string Default = GroupName + ".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 public abstract class CmsKitAdminAppServiceBase : CmsKitAppServiceBase
{ {
@ -6,5 +15,29 @@
{ {
ObjectMapperContext = typeof(CmsKitAdminApplicationModule); 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( new TagEntityTypeDefiniton(
BlogPostConsts.EntityType, BlogPostConsts.EntityType,
LocalizableString.Create<CmsKitResource>("BlogPost"), LocalizableString.Create<CmsKitResource>("BlogPost"),
CmsKitAdminPermissions.BlogPosts.Update, new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update },
CmsKitAdminPermissions.BlogPosts.Update, new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update },
CmsKitAdminPermissions.BlogPosts.Update)); new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update }));
} }
}); });
@ -60,9 +60,9 @@ namespace Volo.CmsKit.Admin
{ {
options.EntityTypes.AddIfNotContains( options.EntityTypes.AddIfNotContains(
new MediaDescriptorDefinition( new MediaDescriptorDefinition(
BlogPostConsts.EntityType, BlogPostConsts.EntityType,
createPolicy: CmsKitAdminPermissions.BlogPosts.Update, createPolicies: new[] { CmsKitAdminPermissions.BlogPosts.Create, CmsKitAdminPermissions.BlogPosts.Update },
deletePolicy: CmsKitAdminPermissions.BlogPosts.Delete)); deletePolicies: new[] { CmsKitAdminPermissions.BlogPosts.Delete }));
} }
if (GlobalFeatureManager.Instance.IsEnabled<PagesFeature>()) if (GlobalFeatureManager.Instance.IsEnabled<PagesFeature>())
@ -70,8 +70,8 @@ namespace Volo.CmsKit.Admin
options.EntityTypes.AddIfNotContains( options.EntityTypes.AddIfNotContains(
new MediaDescriptorDefinition( new MediaDescriptorDefinition(
PageConsts.EntityType, PageConsts.EntityType,
createPolicy: CmsKitAdminPermissions.Pages.Update, createPolicies: new[] { CmsKitAdminPermissions.Pages.Create, CmsKitAdminPermissions.Pages.Update },
deletePolicy: CmsKitAdminPermissions.Pages.Delete)); 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); var definition = await MediaDescriptorDefinitionStore.GetDefinitionAsync(inputStream.EntityType);
await CheckPolicyAsync(definition.CreatePolicy); await CheckAnyOfPoliciesAsync(definition.CreatePolicies);
var newId = GuidGenerator.Create(); var newId = GuidGenerator.Create();
using (var stream = inputStream.GetStream()) using (var stream = inputStream.GetStream())
@ -56,7 +56,7 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
var definition = await MediaDescriptorDefinitionStore.GetDefinitionAsync(mediaDescriptor.EntityType); var definition = await MediaDescriptorDefinitionStore.GetDefinitionAsync(mediaDescriptor.EntityType);
await CheckPolicyAsync(definition.DeletePolicy); await CheckAnyOfPoliciesAsync(definition.DeletePolicies);
await MediaContainer.DeleteAsync(id.ToString()); await MediaContainer.DeleteAsync(id.ToString());
await MediaDescriptorRepository.DeleteAsync(id); 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); var definition = await TagDefinitionStore.GetTagEntityTypeDefinitionAsync(input.EntityType);
await CheckPolicyAsync(definition.CreatePolicy); await CheckAnyOfPoliciesAsync(definition.CreatePolicies);
var tag = await TagManager.GetOrAddAsync(input.EntityType, input.TagName); 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); var definition = await TagDefinitionStore.GetTagEntityTypeDefinitionAsync(input.EntityType);
await CheckPolicyAsync(definition.DeletePolicy); await CheckAnyOfPoliciesAsync(definition.DeletePolicies);
await EntityTagManager.RemoveTagFromEntityAsync( await EntityTagManager.RemoveTagFromEntityAsync(
input.TagId, input.TagId,
@ -59,7 +59,7 @@ namespace Volo.CmsKit.Admin.Tags
{ {
var definition = await TagDefinitionStore.GetTagEntityTypeDefinitionAsync(input.EntityType); var definition = await TagDefinitionStore.GetTagEntityTypeDefinitionAsync(input.EntityType);
await CheckPolicyAsync(definition.UpdatePolicy); await CheckAnyOfPoliciesAsync(definition.UpdatePolicies);
await EntityTagManager.SetEntityTagsAsync(input.EntityType, input.EntityId, input.Tags); 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 JetBrains.Annotations;
using System; using System;
using System.Collections.Generic;
namespace Volo.CmsKit.MediaDescriptors namespace Volo.CmsKit.MediaDescriptors
{ {
public class MediaDescriptorDefinition : PolicySpecifiedDefinition, IEquatable<MediaDescriptorDefinition> public class MediaDescriptorDefinition : PolicySpecifiedDefinition
{ {
public MediaDescriptorDefinition( public MediaDescriptorDefinition(
[NotNull] string entityType, [NotNull] string entityType,
[CanBeNull] string createPolicy = null, IEnumerable<string> createPolicies = null,
[CanBeNull] string updatePolicy = null, IEnumerable<string> updatePolicies = null,
[CanBeNull] string deletePolicy = null) : base(entityType, IEnumerable<string> deletePolicies = null) : base(entityType,
createPolicy, createPolicies,
updatePolicy, updatePolicies,
deletePolicy) 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 JetBrains.Annotations;
using System; using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp; using Volo.Abp;
namespace Volo.CmsKit namespace Volo.CmsKit
@ -12,27 +14,39 @@ namespace Volo.CmsKit
public PolicySpecifiedDefinition( public PolicySpecifiedDefinition(
[NotNull] string entityType, [NotNull] string entityType,
[CanBeNull] string createPolicy = null, IEnumerable<string> createPolicies = null,
[CanBeNull] string updatePolicy = null, IEnumerable<string> updatePolicies = null,
[CanBeNull] string deletePolicy = null) IEnumerable<string> deletePolicies = null)
{ {
EntityType = Check.NotNullOrEmpty(entityType, nameof(entityType)); EntityType = Check.NotNullOrEmpty(entityType, nameof(entityType));
CreatePolicy = createPolicy;
DeletePolicy = deletePolicy; if (createPolicies != null)
UpdatePolicy = updatePolicy; {
CreatePolicies = CreatePolicies.Concat(createPolicies).ToList();
}
if (updatePolicies != null)
{
UpdatePolicies = UpdatePolicies.Concat(updatePolicies).ToList();
}
if (deletePolicies != null)
{
DeletePolicies = DeletePolicies.Concat(deletePolicies).ToList();
}
} }
[NotNull] [NotNull]
public string EntityType { get; set; } public string EntityType { get; set; }
[CanBeNull] [NotNull]
public virtual string CreatePolicy { get; set; } public virtual ICollection<string> CreatePolicies { get; } = new List<string>();
[CanBeNull] [NotNull]
public virtual string UpdatePolicy { get; set; } public virtual ICollection<string> UpdatePolicies { get; } = new List<string>();
[CanBeNull] [NotNull]
public virtual string DeletePolicy { get; set; } public virtual ICollection<string> DeletePolicies { get; } = new List<string>();
public bool Equals(PolicySpecifiedDefinition other) 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 JetBrains.Annotations;
using System; using System;
using System.Collections.Generic;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Localization; using Volo.Abp.Localization;
@ -17,12 +18,12 @@ namespace Volo.CmsKit.Tags
public TagEntityTypeDefiniton( public TagEntityTypeDefiniton(
[NotNull] string entityType, [NotNull] string entityType,
[CanBeNull] ILocalizableString displayName = null, [CanBeNull] ILocalizableString displayName = null,
[CanBeNull] string createPolicy = null, IEnumerable<string> createPolicies = null,
[CanBeNull] string updatePolicy = null, IEnumerable<string> updatePolicies = null,
[CanBeNull] string deletePolicy = null) : base(entityType, createPolicy, updatePolicy, deletePolicy) IEnumerable<string> deletePolicies = null) : base(entityType, createPolicies, updatePolicies, deletePolicies)
{ {
EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
DisplayName = displayName; DisplayName = displayName;
} }
public bool Equals(TagEntityTypeDefiniton other) 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( cmsKitTagOptions.EntityTypes.Add(
new TagEntityTypeDefiniton( new TagEntityTypeDefiniton(
"My.Entity.Type", "My.Entity.Type",
LocalizableString.Create<CmsKitResource>("MyEntity"), LocalizableString.Create<CmsKitResource>("MyEntity"),
"SomeCreatePolicy", new[] { "SomeCreatePolicy" },
"SomeUpdatePolicy", new[] { "SomeUpdatePolicy" },
"SomeDeletePolicy" new[] { "SomeDeletePolicy" }
)); ));
} }

Loading…
Cancel
Save