diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs
index 6de7bad5e4..baa26b0fff 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs
+++ b/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";
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminAppServiceBase.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminAppServiceBase.cs
index 3f4596f586..83d36431c8 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminAppServiceBase.cs
+++ b/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);
}
+
+ ///
+ /// Checks given policies until finding granted policy. If none of them is granted, throws
+ ///
+ /// Policies to be checked.
+ /// Thrown when none of policies is granted.
+ protected async Task CheckAnyOfPoliciesAsync([NotNull] IEnumerable 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;
+ }
}
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs
index 6da0e9233a..95dbe44a04 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs
+++ b/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("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())
@@ -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 }));
}
});
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs
index 5307591447..ba2b1a70b5 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs
+++ b/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);
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs
index cf3de19933..d118ddece7 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs
+++ b/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);
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptorDefinition.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptorDefinition.cs
index 073ed694f6..95bfaacb61 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptorDefinition.cs
+++ b/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
+ 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 createPolicies = null,
+ IEnumerable updatePolicies = null,
+ IEnumerable deletePolicies = null) : base(entityType,
+ createPolicies,
+ updatePolicies,
+ deletePolicies)
{
}
-
- public bool Equals(MediaDescriptorDefinition other)
- {
- return base.Equals(other);
- }
}
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/PolicySpecifiedDefinition.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/PolicySpecifiedDefinition.cs
index 2a5f69b69e..edfee13337 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/PolicySpecifiedDefinition.cs
+++ b/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 createPolicies = null,
+ IEnumerable updatePolicies = null,
+ IEnumerable 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 CreatePolicies { get; } = new List();
- [CanBeNull]
- public virtual string UpdatePolicy { get; set; }
+ [NotNull]
+ public virtual ICollection UpdatePolicies { get; } = new List();
- [CanBeNull]
- public virtual string DeletePolicy { get; set; }
+ [NotNull]
+ public virtual ICollection DeletePolicies { get; } = new List();
public bool Equals(PolicySpecifiedDefinition other)
{
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs
index a6fb4cde7a..6dedb1410e 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs
+++ b/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 createPolicies = null,
+ IEnumerable updatePolicies = null,
+ IEnumerable deletePolicies = null) : base(entityType, createPolicies, updatePolicies, deletePolicies)
{
- EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
DisplayName = displayName;
+
}
public bool Equals(TagEntityTypeDefiniton other)
diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs
index a405c27190..2f2013cd0b 100644
--- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs
+++ b/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("MyEntity"),
- "SomeCreatePolicy",
- "SomeUpdatePolicy",
- "SomeDeletePolicy"
+ new[] { "SomeCreatePolicy" },
+ new[] { "SomeUpdatePolicy" },
+ new[] { "SomeDeletePolicy" }
));
}