From 9960c63f59a2e59aa3435413a47aa0aca8165014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Sun, 19 Jan 2025 18:40:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E4=B8=BB=E9=A2=98=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/Article/ArticleGetListOutputDto.cs | 2 - .../Dtos/Article/ArticleGetOutputDto.cs | 19 +++ .../Dtos/Discuss/DiscussCreateInputVo.cs | 7 +- .../Dtos/Discuss/DiscussGetListOutputDto.cs | 55 +------- .../Dtos/Discuss/DiscussGetOutputDto.cs | 27 +++- .../Dtos/Discuss/DiscussUpdateInputVo.cs | 7 +- .../Services/Forum/ArticleService.cs | 90 ++++++------ .../Services/Forum/DiscussService.cs | 28 ++-- .../Enums/DiscussPermissionTypeEnum.cs | 9 +- .../Entities/Forum/DiscussAggregateRoot.cs | 8 +- .../Managers/ForumManager.cs | 51 +++++-- Yi.Bbs.Vue3/src/components/DisscussCard.vue | 6 +- Yi.Bbs.Vue3/src/components/UserSelectInfo.vue | 129 ------------------ Yi.Bbs.Vue3/src/views/EditArticle.vue | 34 ++--- 14 files changed, 182 insertions(+), 290 deletions(-) delete mode 100644 Yi.Bbs.Vue3/src/components/UserSelectInfo.vue diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetListOutputDto.cs index b63cd27e..01c347c1 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetListOutputDto.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetListOutputDto.cs @@ -4,8 +4,6 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Article { public class ArticleGetListOutputDto : EntityDto { - //批量查询,不给内容,性能考虑 - //public string Content { get; set; } public string Name { get; set; } public Guid DiscussId { get; set; } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetOutputDto.cs index 0d974c80..b76fa472 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetOutputDto.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Article/ArticleGetOutputDto.cs @@ -1,4 +1,5 @@ using Volo.Abp.Application.Dtos; +using Yi.Framework.Bbs.Domain.Shared.Consts; namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Article { @@ -10,5 +11,23 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Article public Guid ParentId { get; set; } public DateTime CreationTime { get; set; } + + public bool HasPermission { get;internal set; } + + /// + /// 璁剧疆鏉冮檺 + /// + public void SetPassPermission() + { + HasPermission = true; + } + /// + /// 璁剧疆鏃犳潈闄 + /// + public void SetNoPermission() + { + HasPermission = false; + Content=DiscussConst.Privacy; + } } } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussCreateInputVo.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussCreateInputVo.cs index 3969db64..c89b5bc4 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussCreateInputVo.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussCreateInputVo.cs @@ -35,6 +35,11 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss /// /// 鏍囩 /// - public List? DiscussLables { get; set; } + public List? DiscussLableIds { get; set; } + + /// + /// 瑙掕壊 + /// + public List? PermissionRoleCodes { get; set; } = new List(); } } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs index 8698315f..7e1914c4 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs @@ -18,7 +18,6 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss /// public bool IsAgree { get; set; } = false; public string Title { get; set; } - public string Types { get; set; } public string? Introduction { get; set; } public int AgreeNum { get; set; } @@ -42,58 +41,16 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss /// 灏侀潰 /// public string? Cover { get; set; } - - //绉佹湁闇瑕佸垽鏂璫ode鏉冮檺 - public string? PrivateCode { get; set; } + public DateTime CreationTime { get; set; } - public List? PermissionUserIds { get; set; } + /// + /// 鎵闇瑙掕壊 + /// + public List? PermissionRoleCodes { get; set; } = new List(); public BbsUserGetListOutputDto User { get; set; } - public List? DiscussLables { get; set; } = new List(); + public List? DiscussLableIds { get; set; } = new List(); public List Lables { get; set; } = new List(); - public void SetBan() - { - Title = DiscussConst.Privacy; - Introduction = ""; - Cover = null; - //琚姝 - IsBan = true; - } } - - - public static class DiscussGetListOutputDtoExtension - { - - public static void ApplyPermissionTypeFilter(this List dtos, Guid userId) - { - dtos?.ForEach(dto => - { - switch (dto.PermissionType) - { - case DiscussPermissionTypeEnum.Public: - break; - case DiscussPermissionTypeEnum.Oneself: - //褰撳墠涓婚鏄粎鑷繁鍙锛屽悓鏃朵笉鏄綋鍓嶇櫥褰曠敤鎴 - if (dto.User.Id != userId) - { - dto.SetBan(); - } - break; - case DiscussPermissionTypeEnum.User: - //褰撳墠涓婚涓洪儴鍒嗗彲瑙侊紝鍚屾椂涓嶆槸褰撳墠鐧诲綍鐢ㄦ埛 涔 涓嶅湪鍙鐢ㄦ埛鍒楄〃涓 - if (dto.User.Id != userId && !dto.PermissionUserIds.Contains(userId)) - { - dto.SetBan(); - } - break; - default: - break; - } - }); - } - - } - } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs index 7630a087..54d99167 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs @@ -2,6 +2,7 @@ using Volo.Abp.Application.Dtos; using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser; using Yi.Framework.Bbs.Application.Contracts.Dtos.DiscussLable; using Yi.Framework.Bbs.Application.Contracts.Dtos.Plate; +using Yi.Framework.Bbs.Domain.Shared.Consts; using Yi.Framework.Bbs.Domain.Shared.Enums; using Yi.Framework.Rbac.Application.Contracts.Dtos.User; @@ -14,7 +15,6 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss /// public bool IsDisableCreateComment { get; set; } public string Title { get; set; } - public string? Types { get; set; } public string? Introduction { get; set; } public int AgreeNum { get; set; } public int SeeNum { get; set; } @@ -37,12 +37,33 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss public DateTime CreationTime { get; set; } public DiscussPermissionTypeEnum PermissionType { get; set; } public bool IsAgree { get; set; } = false; - public List? PermissionUserIds { get; set; } + public List PermissionRoleCodes { get; set; } = new List(); + + + public BbsUserGetListOutputDto User { get; set; } public PlateGetOutputDto Plate { get; set; } - public List? DiscussLables { get; set; } = new List(); + public List? DiscussLableIds { get; set; } = new List(); public List Lables { get; set; } =new List(); + + public bool HasPermission { get;internal set; } + + /// + /// 璁剧疆鏉冮檺 + /// + public void SetPassPermission() + { + HasPermission = true; + } + /// + /// 璁剧疆鏃犳潈闄 + /// + public void SetNoPermission() + { + HasPermission = false; + Content=DiscussConst.Privacy; + } } } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussUpdateInputVo.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussUpdateInputVo.cs index 474ca660..36120276 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussUpdateInputVo.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussUpdateInputVo.cs @@ -29,6 +29,11 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss /// /// 鏍囩 /// - public List? DiscussLables { get; set; } + public List? DiscussLableIds { get; set; } + + /// + /// 闇姹傝鑹 + /// + public List? PermissionRoleCodes { get; set; } = new List(); } } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/ArticleService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/ArticleService.cs index fbb798fe..d0d64bc2 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/ArticleService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/ArticleService.cs @@ -30,22 +30,21 @@ namespace Yi.Framework.Bbs.Application.Services.Forum /// /// Article鏈嶅姟瀹炵幇 /// - - public class ArticleService : YiCrudAppService, - IArticleService + public class ArticleService : YiCrudAppService, + IArticleService { public ArticleService(IArticleRepository articleRepository, ISqlSugarRepository discussRepository, IDiscussService discussService, ForumManager forumManager) : base(articleRepository) { - _articleRepository = articleRepository; _discussRepository = discussRepository; _discussService = discussService; _forumManager = forumManager; - } + private ForumManager _forumManager; private IArticleRepository _articleRepository; private ISqlSugarRepository _discussRepository; @@ -55,13 +54,34 @@ namespace Yi.Framework.Bbs.Application.Services.Forum { RefAsync total = 0; - var entities = await _articleRepository._DbQueryable.WhereIF(!string.IsNullOrEmpty(input.Name), x => x.Name.Contains(input.Name!)) - //.WhereIF(!string.IsNullOrEmpty(input.Code), x => x.Name.Contains(input.Code!)) - .WhereIF(input.StartTime is not null && input.EndTime is not null, x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime) - .ToPageListAsync(input.SkipCount, input.MaxResultCount, total); + var entities = await _articleRepository._DbQueryable + .WhereIF(!string.IsNullOrEmpty(input.Name), x => x.Name.Contains(input.Name!)) + .WhereIF(input.StartTime is not null && input.EndTime is not null, + x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime) + .ToPageListAsync(input.SkipCount, input.MaxResultCount, total); return new PagedResultDto(total, await MapToGetListOutputDtosAsync(entities)); } + /// + /// 鏌ヨ鏂囩珷 + /// + /// + /// + public override async Task GetAsync(Guid id) + { + var entity = await _articleRepository.GetAsync(id); + var output = entity.Adapt(); + if (!await _forumManager.VerifyDiscussPermissionAsync(entity.DiscussId, CurrentUser.Id, CurrentUser.Roles)) + { + output.SetNoPermission(); + } + else + { + output.SetPassPermission(); + } + + return output; + } /// /// 鑾峰彇鏂囩珷鍏ㄩ儴鏍戠骇淇℃伅 @@ -72,16 +92,13 @@ namespace Yi.Framework.Bbs.Application.Services.Forum [Route("article/all/discuss-id/{discussId}")] public async Task> GetAllAsync([FromRoute] Guid discussId) { - await _forumManager.VerifyDiscussPermissionAsync(discussId,CurrentUser.Id); - - var entities = await _articleRepository.GetTreeAsync(x => x.DiscussId == discussId); var items = entities.Adapt>(); return items; } /// - /// 鏌ヨ鏂囩珷 + /// 鏌ヨ鏂囩珷姒傝堪 /// /// /// @@ -108,7 +125,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum [Authorize] public async override Task CreateAsync(ArticleCreateInputVo input) { - await VerifyDiscussCreateIdAsync(input.DiscussId); + await VerifyPermissionAsync(input.DiscussId); return await base.CreateAsync(input); } @@ -121,7 +138,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum public override async Task UpdateAsync(Guid id, ArticleUpdateInputVo input) { var entity = await _articleRepository.GetByIdAsync(id); - await VerifyDiscussCreateIdAsync(entity.DiscussId); + await VerifyPermissionAsync(entity.DiscussId); return await base.UpdateAsync(id, input); } @@ -134,7 +151,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum public override async Task DeleteAsync(Guid id) { var entity = await _articleRepository.GetByIdAsync(id); - await VerifyDiscussCreateIdAsync(entity.DiscussId); + await VerifyPermissionAsync(entity.DiscussId); await base.DeleteAsync(id); } @@ -143,8 +160,10 @@ namespace Yi.Framework.Bbs.Application.Services.Forum /// 瀵煎叆鏂囩珷 /// /// - public async Task PostImportAsync([FromQuery] ArticleImprotDto input, [FromForm][Required] IFormFileCollection file) + public async Task PostImportAsync([FromQuery] ArticleImprotDto input, + [FromForm] [Required] IFormFileCollection file) { + await VerifyPermissionAsync(input.DiscussId); var fileObjs = new List(); if (file.Count > 0) { @@ -171,45 +190,18 @@ namespace Yi.Framework.Bbs.Application.Services.Forum { throw new UserFriendlyException("鏈夋嫨鏂囦欢"); } + //浣跨敤绠鍗曞伐鍘傛牴鎹紶鍏ョ殑绫诲瀷杩涜鍒ゆ柇 await _forumManager.PostImportAsync(input.DiscussId, input.ArticleParentId, fileObjs, input.ImportType); } - /// - /// 鏍¢獙鍒涘缓鏉冮檺锛寀serId涓轰富棰樺垱寤鸿 - /// - /// - /// - private async Task VerifyDiscussCreateIdAsync(Guid disucssId) + private async Task VerifyPermissionAsync(Guid discussId) { - var discuss = await _discussRepository.GetFirstAsync(x => x.Id == disucssId); - if (discuss is null) + if (!await _forumManager.VerifyDiscussPermissionAsync(discussId, CurrentUser.Id, isVerifyLook: false)) { - throw new UserFriendlyException(DiscussConst.No_Exist); - } - - //杩欏潡鏈夌偣缁曪紝杩欎釜鐗堟湰鐨勫啓娉曟瘮杈冩竻鏅 - bool result = false; - - if (CurrentUser.GetPermissions().Contains(UserConst.AdminPermissionCode)) - { - //濡傛灉鏄秴绠,鐩存帴璺宠繃 - result = true; - } - else - { - //濡傛灉涓嶆槸瓒呯,蹇呴』婊¤冻浣滆呮槸鑷繁锛屽悓鏃惰繕鏈夊彂甯冪殑鏉冮檺 - if (discuss.CreatorId == CurrentUser.Id) - { - result = true; - } - } - - if (!result) - { - throw new UserFriendlyException("鏉冮檺涓嶈冻锛岃鑱旂郴涓婚浣滆呮垨绠$悊鍛樼敵璇峰紑閫"); + throw new UserFriendlyException("鎮ㄦ棤鏉冮檺杩涜鎿嶄綔", "403"); } } } -} +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs index c25b6880..36b06c0c 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs @@ -59,9 +59,6 @@ namespace Yi.Framework.Bbs.Application.Services.Forum private ISqlSugarRepository _plateEntityRepository { get; set; } - - - /// /// 鍗曟煡 @@ -117,15 +114,24 @@ namespace Yi.Framework.Bbs.Application.Services.Forum //缁勮鏍囩 var lableDic=await _discussLableRepository.GetDiscussLableCacheMapAsync(); - foreach (var lableId in output.DiscussLables) + foreach (var lableId in output.DiscussLableIds) { if (lableDic.TryGetValue(lableId,out var item)) { output.Lables.Add(item.Adapt()); } } - - await _forumManager.VerifyDiscussPermissionAsync(output.Id,CurrentUser.Id); + + //濡傛灉娌℃湁鏉冮檺 + if (!await _forumManager.VerifyDiscussPermissionAsync(output.Id,CurrentUser.Id, CurrentUser.Roles)) + { + output.SetNoPermission(); + } + else + { + output.SetPassPermission(); + } + await _localEventBus.PublishAsync(new SeeDiscussEventArgs { DiscussId = output.Id, OldSeeNum = output.SeeNum }); return output; @@ -179,10 +185,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum (await _agreeRepository._DbQueryable.Where(x => discussId.Contains(x.DiscussId)).ToListAsync()) .GroupBy(x => x.DiscussId) .ToDictionary(x => x.Key, y => y.Select(y => y.CreatorId).ToList()); - - //鏌ヨ瀹屼富棰樹箣鍚庯紝瑕佽繃婊や竴涓嬬鏈夌殑涓婚淇℃伅 - items.ApplyPermissionTypeFilter(CurrentUser.Id ?? Guid.Empty); - + var levelCacheDic= await _bbsUserManager.GetLevelCacheMapAsync(); var lableDic=await _discussLableRepository.GetDiscussLableCacheMapAsync(); @@ -199,7 +202,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum } } - foreach (var lableId in x.DiscussLables) + foreach (var lableId in x.DiscussLableIds) { if (lableDic.TryGetValue(lableId,out var item)) { @@ -236,7 +239,6 @@ namespace Yi.Framework.Bbs.Application.Services.Forum Address = user.Address, Age = user.Age, CreationTime = user.CreationTime, - Level = info.Level, Introduction = user.Introduction, Icon = user.Icon, @@ -255,7 +257,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum output?.ForEach(x => { x.User.LevelName = levelCacheDic[x.User.Level].Name; - foreach (var lableId in x.DiscussLables) + foreach (var lableId in x.DiscussLableIds) { if (lableDic.TryGetValue(lableId,out var item)) { diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/DiscussPermissionTypeEnum.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/DiscussPermissionTypeEnum.cs index b0930e7e..1b91bcf6 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/DiscussPermissionTypeEnum.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/DiscussPermissionTypeEnum.cs @@ -14,14 +14,9 @@ namespace Yi.Framework.Bbs.Domain.Shared.Enums Public = 0, /// - /// 浠呰嚜宸卞彲瑙 + /// 瑙掕壊瑕佹眰鍙 /// - Oneself, - - /// - /// 閮ㄥ垎鐢ㄦ埛鍙 - /// - User + Role=1 } } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Forum/DiscussAggregateRoot.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Forum/DiscussAggregateRoot.cs index f2b1b695..be562f33 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Forum/DiscussAggregateRoot.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/Forum/DiscussAggregateRoot.cs @@ -61,13 +61,13 @@ namespace Yi.Framework.Bbs.Domain.Entities.Forum /// - /// 褰揚ermissionType涓洪儴鍒嗙敤鎴锋椂鍊欙紝浠ヤ笅鍒楄〃涓殑鐢ㄦ埛+鍒涘缓鑰 浠h〃鎷ユ湁鏉冮檺 + /// 褰揚ermissionType涓鸿鑹叉椂鍊欙紝浠ヤ笅鍒楄〃涓殑瑙掕壊+鍒涘缓鑰 浠h〃鎷ユ湁鏉冮檺 /// - [SugarColumn(IsJson = true)]//浣跨敤json澶勭悊 - public List? PermissionUserIds { get; set; } + [SugarColumn(IsJson = true)] //浣跨敤json澶勭悊 + public List? PermissionRoleCodes { get; set; } = new List(); [SugarColumn(IsJson = true)]//浣跨敤json澶勭悊 - public List? DiscussLables{ get; set; } + public List? DiscussLableIds{ get; set; } /// /// 鏄惁绂佹璇勮鍒涘缓鍔熻兘 diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs index e462a4ae..92ef9b9c 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs @@ -7,6 +7,7 @@ using Yi.Framework.Bbs.Domain.Managers.ArticleImport; using Yi.Framework.Bbs.Domain.Shared.Consts; using Yi.Framework.Bbs.Domain.Shared.Enums; using Yi.Framework.Bbs.Domain.Shared.Model; +using Yi.Framework.Rbac.Domain.Shared.Consts; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Framework.Bbs.Domain.Managers @@ -52,30 +53,52 @@ namespace Yi.Framework.Bbs.Domain.Managers /// /// /// - public async Task VerifyDiscussPermissionAsync(Guid discussId,Guid? userId) + public async Task VerifyDiscussPermissionAsync(Guid discussId,Guid? userId,string[] roles=null,bool isVerifyLook=true) { var discuss = await _discussRepository.GetFirstAsync(x => x.Id == discussId); if (discuss is null) { throw new UserFriendlyException(DiscussConst.No_Exist); } - - if (discuss.PermissionType == DiscussPermissionTypeEnum.Oneself) + //浣滆呮槸鑷繁锛岀洿鎺ユ湁鏉冮檺 + if (discuss.CreatorId ==userId) { - if (discuss.CreatorId != userId) - { - throw new UserFriendlyException(DiscussConst.Privacy); - } + return true; } - - if (discuss.PermissionType == DiscussPermissionTypeEnum.User) + //绠$悊鍛橈紝鐩存帴鏀捐 + if (roles.Contains(UserConst.AdminRolesCode)) { - if (discuss.CreatorId !=userId && - !discuss.PermissionUserIds.Contains(userId?? Guid.Empty)) - { - throw new UserFriendlyException(DiscussConst.Privacy); - } + return true; } + + //鏄惁涓烘牎楠 鏌ョ湅鏉冮檺锛 鍏朵粬鎿嶄綔鏉冮檺锛堝鍒犳敼锛 + if (isVerifyLook) + { + //瑕佹眰瑙掕壊 + if (discuss.PermissionType == DiscussPermissionTypeEnum.Role) + { + if (roles is null) + { + return false; + } + + List roleList = roles.ToList(); + //鎵閫夎鑹诧紝娌℃湁浠讳綍浜ら泦 + if (!discuss.PermissionRoleCodes.Intersect(roleList).Any()) + { + return false; + } + } + + //閫氳繃浜嗕笂闈㈣姹傦紝鍓╀笅鐨勯兘鏄湁鏉冮檺鐨勶紝鍙互鐩存帴鐪 + return true; + } + else + { + //閫氳繃浜嗕笂闈㈢殑瑕佹眰锛屽墿涓嬬殑灏辨槸娌℃湁鏉冮檺浜嗭紝鐩存帴鎷︽埅 + return false; + } + } /// diff --git a/Yi.Bbs.Vue3/src/components/DisscussCard.vue b/Yi.Bbs.Vue3/src/components/DisscussCard.vue index c1161bbc..7b30d5dd 100644 --- a/Yi.Bbs.Vue3/src/components/DisscussCard.vue +++ b/Yi.Bbs.Vue3/src/components/DisscussCard.vue @@ -40,6 +40,9 @@
+ + {{item}} + 鏆傛棤鏍囩 {{item.name}}
@@ -126,7 +129,8 @@ onMounted(() => { discuss.agreeNum = props.discuss.agreeNum; discuss.isBan = props.discuss.isBan; discuss.cover = props.discuss.cover; - discuss.lables=props.discuss.lables + discuss.lables=props.discuss.lables; + discuss.permissionRoleCodes=props.discuss.permissionRoleCodes; });