diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index cab77cdd26..d4a32c194f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -86,7 +86,7 @@ "Permission:BlogPostManagement.Delete": "Delete", "Permission:BlogPostManagement.Update": "Update", "Permission:BlogPostManagement.Publish": "Publish", - "Permission:CmsKit": "CmsKit", + "Permission:CmsKit": "CmsKit Admin", "Permission:Comments": "Comment Management", "Permission:Comments.Delete": "Delete", "Permission:Contents": "Content Management", @@ -118,6 +118,8 @@ "Permission:TagManagement.Delete": "Delete", "Permission:TagManagement.Update": "Update", "Permission:GlobalResources": "Global Resources", + "Permission:CmsKitPublic": "CmsKit Public", + "Permission:Comments.DeleteAll": "Delete All", "PickYourReaction": "Pick your reaction", "Rating": "Rating", "RatingUndoMessage": "Your rating will be undo.", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 8b817b5985..f654bd3010 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -86,7 +86,7 @@ "Permission:BlogPostManagement.Delete": "Silme", "Permission:BlogPostManagement.Update": "Güncelleme", "Permission:BlogPostManagement.Publish": "Yayınlama", - "Permission:CmsKit": "CmsKit", + "Permission:CmsKit": "CmsKit Admin", "Permission:Comments": "Yorum Yönetimi", "Permission:Comments.Delete": "Silmek", "Permission:Contents": "İçerik Yönetimi", @@ -117,6 +117,8 @@ "Permission:TagManagement.Create": "Etiket Oluşturma", "Permission:TagManagement.Delete": "Etiket Silme", "Permission:TagManagement.Update": "Etiket Güncelleme", + "Permission:CmsKitPublic": "CmsKit Genel", + "Permission:Comments.DeleteAll": "Tümünü Silme", "PickYourReaction": "Tepkinizi seçin", "Rating": "Puan", "RatingUndoMessage": "Oylamanız geri alınacak.", 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) 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) => @