From 327211756440bcb8677960a2745af7625954b1e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com>
Date: Sun, 24 Dec 2023 11:45:43 +0800
Subject: [PATCH] =?UTF-8?q?feat::=20=E5=AE=8C=E5=96=84=E6=9D=83=E9=99=90?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/ArticleService.cs | 26 +++++++++++++++----
.../Services/CommentService.cs | 22 +++++++++++-----
.../Services/DiscussService.cs | 9 ++++---
3 files changed, 41 insertions(+), 16 deletions(-)
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs
index 32f0c14e..d6ef86c5 100644
--- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/ArticleService.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Mapster;
+using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
@@ -16,6 +17,7 @@ using Yi.Framework.Bbs.Domain.Repositories;
using Yi.Framework.Bbs.Domain.Shared.Consts;
using Yi.Framework.Core.Extensions;
using Yi.Framework.Ddd.Application;
+using Yi.Framework.Rbac.Domain.Authorization;
using Yi.Framework.Rbac.Domain.Shared.Consts;
using Yi.Framework.SqlSugarCore.Abstractions;
@@ -97,6 +99,8 @@ namespace Yi.Framework.Bbs.Application.Services
///
///
///
+ [Permission("bbs:article:add")]
+ [Authorize]
public async override Task CreateAsync(ArticleCreateInputVo input)
{
await VerifyDiscussCreateIdAsync(input.DiscussId);
@@ -144,13 +148,25 @@ namespace Yi.Framework.Bbs.Application.Services
{
throw new UserFriendlyException(DiscussConst.No_Exist);
}
- //只有文章是特殊的,不能在其他主题下创建
- //主题的创建者不是当前用户,同时,没有权限或者超级管理
- //false & true & false ,三个条件任意满意一个,即可成功使用||,最后取反,一个都不满足
+ //这块有点绕,这个版本的写法比较清晰
+ bool result = false;
- //一个条件都不满足,即可拦截
- if (discuss.CreatorId != CurrentUser.Id && !UserConst.Admin.Equals(this.CurrentUser.UserName) && !CurrentUser.GetPermissions().Contains("bbs:discuss:add"))
+ if (this.CurrentUser.GetPermissions().Contains(UserConst.AdminPermissionCode))
+ {
+ //如果是超管,直接跳过
+ result = true;
+ }
+ else
+ {
+ //如果不是超管,必须满足作者是自己,同时还有发布的权限
+ if (discuss.CreatorId == CurrentUser.Id)
+ {
+ result = true;
+ }
+ }
+
+ if (!result)
{
throw new UserFriendlyException("权限不足,请联系主题作者或管理员申请开通");
}
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/CommentService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/CommentService.cs
index e0f20f18..1f6e4be7 100644
--- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/CommentService.cs
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/CommentService.cs
@@ -1,4 +1,5 @@
using Mapster;
+using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Volo.Abp;
@@ -7,9 +8,12 @@ using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser;
using Yi.Framework.Bbs.Application.Contracts.Dtos.Comment;
using Yi.Framework.Bbs.Application.Contracts.IServices;
using Yi.Framework.Bbs.Domain.Entities;
+using Yi.Framework.Bbs.Domain.Extensions;
using Yi.Framework.Bbs.Domain.Managers;
using Yi.Framework.Bbs.Domain.Shared.Consts;
using Yi.Framework.Ddd.Application;
+using Yi.Framework.Rbac.Domain.Authorization;
+using Yi.Framework.Rbac.Domain.Shared.Consts;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.Bbs.Application.Services
@@ -28,7 +32,7 @@ namespace Yi.Framework.Bbs.Application.Services
_discussRepository = discussRepository;
_discussService = discussService;
_repository = CommentRepository;
- _bbsUserManager=bbsUserManager;
+ _bbsUserManager = bbsUserManager;
}
private ForumManager _forumManager { get; set; }
@@ -60,7 +64,7 @@ namespace Yi.Framework.Bbs.Application.Services
//同时为所有用户id进行bbs的扩展即可
List userIds = outoutDto.Select(x => x.CommentedUser.Id).Union(outoutDto.Select(x => x.CreateUser.Id)).ToList();
- var bbsUserInfoDic=( await _bbsUserManager.GetBbsUserInfoAsync(userIds)).ToDictionary(x=>x.Id);
+ var bbsUserInfoDic = (await _bbsUserManager.GetBbsUserInfoAsync(userIds)).ToDictionary(x => x.Id);
foreach (var singleOutput in outoutDto)
{
@@ -71,8 +75,8 @@ namespace Yi.Framework.Bbs.Application.Services
//开始组装dto的层级关系
- //将全部数据进行hash
- var dic = outoutDto.ToDictionary(x => x.Id);
+ //将全部数据进行hash
+ var dic = outoutDto.ToDictionary(x => x.Id);
foreach (var comment in outoutDto)
{
//不是根节点,需要赋值 被评论者用户信息等
@@ -104,7 +108,7 @@ namespace Yi.Framework.Bbs.Application.Services
});
-
+
return new PagedResultDto(entities.Count(), outoutDto);
}
@@ -116,6 +120,8 @@ namespace Yi.Framework.Bbs.Application.Services
///
///
///
+ [Permission("bbs:comment:add")]
+ [Authorize]
public override async Task CreateAsync(CommentCreateInputVo input)
{
var discuess = await _discussRepository.GetFirstAsync(x => x.Id == input.DiscussId);
@@ -123,12 +129,14 @@ namespace Yi.Framework.Bbs.Application.Services
{
throw new UserFriendlyException(DiscussConst.No_Exist);
}
+ //不是超级管理员,且主题开启禁止评论
- if (discuess.IsDisableCreateComment == true)
+ if (discuess.IsDisableCreateComment == true && !CurrentUser.GetPermissions().Contains(UserConst.AdminPermissionCode))
{
throw new UserFriendlyException("该主题已禁止评论功能");
-
}
+
+
var entity = await _forumManager.CreateCommentAsync(input.DiscussId, input.ParentId, input.RootId, input.Content);
return await MapToGetOutputDtoAsync(entity);
}
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs
index 0aa7d6d9..dff7df6a 100644
--- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs
@@ -17,6 +17,7 @@ using Yi.Framework.Bbs.Domain.Shared.Enums;
using Yi.Framework.Bbs.Domain.Shared.Etos;
using Yi.Framework.Ddd.Application;
using Yi.Framework.Rbac.Application.Contracts.Dtos.User;
+using Yi.Framework.Rbac.Domain.Authorization;
using Yi.Framework.Rbac.Domain.Entities;
using Yi.Framework.Rbac.Domain.Shared.Consts;
using Yi.Framework.SqlSugarCore.Abstractions;
@@ -170,6 +171,8 @@ namespace Yi.Framework.Bbs.Application.Services
///
///
///
+ [Permission("bbs:discuss:add")]
+ [Authorize]
public override async Task CreateAsync(DiscussCreateInputVo input)
{
var plate = await _plateEntityRepository.FindAsync(x => x.Id == input.PlateId);
@@ -181,15 +184,13 @@ namespace Yi.Framework.Bbs.Application.Services
//如果开启了禁用创建主题
if (plate.IsDisableCreateDiscuss == true)
{
-
- if (!CurrentUser.GetPermissions().Contains("") && CurrentUser.UserName != UserConst.Admin)
+ //只有超级管理员权限才能进行发布
+ if (!CurrentUser.GetPermissions().Contains(UserConst.AdminPermissionCode))
{
throw new UserFriendlyException("该板块已禁止创建主题,请在其他板块中发布");
}
}
-
-
var entity = await _forumManager.CreateDiscussAsync(await MapToEntityAsync(input));
return await MapToGetOutputDtoAsync(entity);
}