perf: 优化主题权限

This commit is contained in:
橙子
2025-01-19 13:14:08 +08:00
parent e05514bc41
commit 7b5bc0fe3e
5 changed files with 37 additions and 36 deletions

View File

@@ -72,7 +72,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum
[Route("article/all/discuss-id/{discussId}")]
public async Task<List<ArticleAllOutputDto>> GetAllAsync([FromRoute] Guid discussId)
{
await _discussService.VerifyDiscussPermissionAsync(discussId);
await _forumManager.VerifyDiscussPermissionAsync(discussId,CurrentUser.Id);
var entities = await _articleRepository.GetTreeAsync(x => x.DiscussId == discussId);

View File

@@ -50,7 +50,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum
/// <returns></returns>
public async Task<PagedResultDto<CommentGetListOutputDto>> GetDiscussIdAsync([FromRoute] Guid discussId, [FromQuery] CommentGetListInputVo input)
{
await _discussService.VerifyDiscussPermissionAsync(discussId);
await _forumManager.VerifyDiscussPermissionAsync(discussId,CurrentUser.Id);
var entities = await _repository._DbQueryable.WhereIF(!string.IsNullOrEmpty(input.Content), x => x.Content.Contains(input.Content))
.Where(x => x.DiscussId == discussId)

View File

@@ -109,7 +109,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum
item.IsAgree = agreeCreatorList.Contains(CurrentUser.Id);
}
await VerifyDiscussPermissionAsync(item.Id);
await _forumManager.VerifyDiscussPermissionAsync(item.Id,CurrentUser.Id);
await _localEventBus.PublishAsync(new SeeDiscussEventArgs
{ DiscussId = item.Id, OldSeeNum = item.SeeNum });
return item;
@@ -260,37 +260,5 @@ namespace Yi.Framework.Bbs.Application.Services.Forum
var entity = await _forumManager.CreateDiscussAsync(await MapToEntityAsync(input));
return await MapToGetOutputDtoAsync(entity);
}
/// <summary>
/// 校验主题查询权限
/// </summary>
/// <param name="discussId"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
public async Task VerifyDiscussPermissionAsync(Guid discussId)
{
var discuss = await _forumManager._discussRepository.GetFirstAsync(x => x.Id == discussId);
if (discuss is null)
{
throw new UserFriendlyException(DiscussConst.No_Exist);
}
if (discuss.PermissionType == DiscussPermissionTypeEnum.Oneself)
{
if (discuss.CreatorId != CurrentUser.Id)
{
throw new UserFriendlyException(DiscussConst.Privacy);
}
}
if (discuss.PermissionType == DiscussPermissionTypeEnum.User)
{
if (discuss.CreatorId != CurrentUser.Id &&
!discuss.PermissionUserIds.Contains(CurrentUser.Id ?? Guid.Empty))
{
throw new UserFriendlyException(DiscussConst.Privacy);
}
}
}
}
}