Merge branch 'refs/heads/abp' into digital-collectibles

This commit is contained in:
橙子
2025-01-19 18:41:03 +08:00
14 changed files with 182 additions and 290 deletions

View File

@@ -61,13 +61,13 @@ namespace Yi.Framework.Bbs.Domain.Entities.Forum
/// <summary>
/// 当PermissionType为部分用户时候,以下列表中的用户+创建者 代表拥有权限
/// 当PermissionType为角色时候,以下列表中的角色+创建者 代表拥有权限
/// </summary>
[SugarColumn(IsJson = true)]//使用json处理
public List<Guid>? PermissionUserIds { get; set; }
[SugarColumn(IsJson = true)] //使用json处理
public List<string>? PermissionRoleCodes { get; set; } = new List<string>();
[SugarColumn(IsJson = true)]//使用json处理
public List<Guid>? DiscussLables{ get; set; }
public List<Guid>? DiscussLableIds{ get; set; }
/// <summary>
/// 是否禁止评论创建功能

View File

@@ -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
/// <param name="discussId"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
public async Task VerifyDiscussPermissionAsync(Guid discussId,Guid? userId)
public async Task<bool> 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<string> roleList = roles.ToList();
//所选角色,没有任何交集
if (!discuss.PermissionRoleCodes.Intersect(roleList).Any())
{
return false;
}
}
//通过了上面要求,剩下的都是有权限的,可以直接看
return true;
}
else
{
//通过了上面的要求,剩下的就是没有权限了,直接拦截
return false;
}
}
/// <summary>