From 47146794395595cc49ac393caf30839b285a13a0 Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 14 Dec 2022 23:31:49 +0300 Subject: [PATCH 1/3] Added permission for public side --- ...msKitPublicPermissionDefinitionProvider.cs | 26 +++++++++++++++++++ .../Permissions/CmsKitPublicPermissions.cs | 12 +++++++++ .../Comments/CommentPublicAppService.cs | 18 +++++++++---- 3 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissionDefinitionProvider.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissions.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissionDefinitionProvider.cs new file mode 100644 index 0000000000..fa964984e0 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissionDefinitionProvider.cs @@ -0,0 +1,26 @@ + +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.GlobalFeatures; +using Volo.Abp.Localization; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Localization; + +namespace Volo.CmsKit.Permissions; + +public class CmsKitPublicPermissionDefinitionProvider : PermissionDefinitionProvider +{ + public override void Define(IPermissionDefinitionContext context) + { + var cmsGroup = context.GetGroupOrNull(CmsKitPublicPermissions.GroupName) ?? context.AddGroup(CmsKitPublicPermissions.GroupName, L("Permission:CmsKitPublic")); + + var contentGroup = cmsGroup.AddPermission(CmsKitPublicPermissions.Comments.Default, L("Permission:Comments")) + .RequireGlobalFeatures(typeof(CommentsFeature)); + contentGroup.AddChild(CmsKitPublicPermissions.Comments.DeleteAll, L("Permission:Comments.DeleteAll")) + .RequireGlobalFeatures(typeof(CommentsFeature)); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissions.cs new file mode 100644 index 0000000000..760327cdd8 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Permissions/CmsKitPublicPermissions.cs @@ -0,0 +1,12 @@ +namespace Volo.CmsKit.Permissions; + +public static class CmsKitPublicPermissions +{ + public const string GroupName = "CmsKitPublic"; + + public static class Comments + { + public const string Default = GroupName + ".Comments"; + public const string DeleteAll = Default + ".DeleteAll"; + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs index e36cff5717..05857e5db9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; @@ -13,6 +14,7 @@ using Volo.Abp.Users; using Volo.CmsKit.Comments; using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Permissions; using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Comments; @@ -25,17 +27,20 @@ public class CommentPublicAppService : CmsKitPublicAppServiceBase, ICommentPubli protected ICmsUserLookupService CmsUserLookupService { get; } public IDistributedEventBus DistributedEventBus { get; } protected CommentManager CommentManager { get; } + protected IAuthorizationService AuthorizationService { get; } public CommentPublicAppService( ICommentRepository commentRepository, ICmsUserLookupService cmsUserLookupService, IDistributedEventBus distributedEventBus, - CommentManager commentManager) + CommentManager commentManager, + IAuthorizationService authorizationService) { CommentRepository = commentRepository; CmsUserLookupService = cmsUserLookupService; DistributedEventBus = distributedEventBus; CommentManager = commentManager; + AuthorizationService = authorizationService; } public virtual async Task> GetListAsync(string entityType, string entityId) @@ -99,14 +104,17 @@ public class CommentPublicAppService : CmsKitPublicAppServiceBase, ICommentPubli [Authorize] public virtual async Task DeleteAsync(Guid id) { - var comment = await CommentRepository.GetAsync(id); + var allowDelete = await AuthorizationService.IsGrantedAsync(CmsKitPublicPermissions.Comments.DeleteAll); - if (comment.CreatorId != CurrentUser.GetId()) + var comment = await CommentRepository.GetAsync(id); + if (allowDelete || comment.CreatorId == CurrentUser.Id) + { + await CommentRepository.DeleteWithRepliesAsync(comment); + } + else { throw new AbpAuthorizationException(); } - - await CommentRepository.DeleteWithRepliesAsync(comment); } private List ConvertCommentsToNestedStructure(List comments) From 4ab4744cfd4413fb2021c53208793547bdba8926 Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 14 Dec 2022 23:32:24 +0300 Subject: [PATCH 2/3] Applied permission changes to the UI side --- .../Components/Commenting/Default.cshtml | 19 +++++++------ .../Shared/Components/Commenting/default.js | 28 ++++++++++++------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml index 92ea8b0333..944a818d74 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml @@ -53,7 +53,6 @@
- @@ -90,20 +89,25 @@ { @if (CurrentUser.IsAuthenticated) { - + @L["Reply"] + + + @L["Delete"] + } else { - @L["LoginToReply"] + + @L["LoginToReply"] + } } + + @if (authorId == CurrentUser.Id) { - - @L["Delete"] - @L["Edit"] @@ -114,8 +118,7 @@ Func GetEditArea(Guid id, string text, string concurrencyStamp) => @