Merge branch 'refs/heads/abp' into digital-collectibles
This commit is contained in:
@@ -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>
|
||||
/// 是否禁止评论创建功能
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user