bugfix: linq查询报错&&用户筛选权限后的目录树

This commit is contained in:
2021-07-05 09:52:30 +08:00
parent 2e2800e43b
commit 9a97aba30b
5 changed files with 52 additions and 54 deletions

View File

@@ -85,12 +85,7 @@ namespace Ewide.Core.Controller
[HttpGet("/sysArea/tree")]
public async Task<List<AreaTreeNode>> GetAreaCodeTree([FromQuery]int? level)
{
List<string> areaCodeList = null;
if (!_userManager.SuperAdmin)
{
areaCodeList = await _userManager.GetUserAllAreaList();
}
return await _areaCodeService.GetAreaCodeTree(level, areaCodeList);
return await _areaCodeService.GetAreaCodeTree(level);
}
}
}

View File

@@ -3149,12 +3149,6 @@
<param name="code">区域代码</param>
<returns></returns>
</member>
<member name="M:Ewide.Core.Service.Area.AreaCodeService.GetAreaCodeTree(System.Nullable{System.Int32},System.Collections.Generic.List{System.String})">
<summary>
获取区域目录树
</summary>
<returns></returns>
</member>
<member name="M:Ewide.Core.Service.Area.AreaCodeService.UpdateAreaCode(Ewide.Core.Service.Area.Dto.AreaCodeInput)">
<summary>
更新区域信息
@@ -3162,6 +3156,12 @@
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Ewide.Core.Service.Area.AreaCodeService.GetAreaCodeTree(System.Nullable{System.Int32})">
<summary>
获取区域目录树
</summary>
<returns></returns>
</member>
<member name="T:Ewide.Core.Service.AuthService">
<summary>
登录授权相关服务

View File

@@ -345,9 +345,16 @@ namespace Ewide.Core
//本部门及以下 或者 本部门区域及以下 树结构显示本级和以下所有区域
var extraUserArea = await GetUserExtraAreaScopeList(userId);
var roles = await _sysUserRoleRep.DetachedEntities.Include(ur => ur.SysRole).Where(ur => ur.SysUserId == userId).Select(ur => ur.SysRole).ToListAsync();
var extraRoleArea = await _sysRoleAreaRep.DetachedEntities.Where(ra => roles.Where(r => r.DataScopeType == (int)DataScopeType.DEFINE).Select(r => r.Id).Contains(ra.SysRoleId)).Select(ra => ra.AreaCode).ToListAsync();
var customAreaRole = roles.Where(r => r.DataScopeType == (int)DataScopeType.DEFINE).Select(r => r.Id);
var extraRoleArea = await _sysRoleAreaRep.DetachedEntities.Where(ra => customAreaRole.Contains(ra.SysRoleId)).Select(ra => ra.AreaCode).ToListAsync();
var roleTypeArea = await GetUserDataScopeTypeAreaList(orgAreaCode, roles.Select(r => r.DataScopeType).ToList());
return extraRoleArea.Concat(extraUserArea).Concat(roleTypeArea).Distinct().ToList();
var extraArea = await GetUserExtraAreaList(extraRoleArea.Concat(extraUserArea).Distinct().ToList());
return extraArea.Concat(roleTypeArea).Distinct().ToList();
}
private async Task<List<string>> GetUserExtraAreaList(List<string> extraAreaCode)
{
var cachedAreaCode = await GetCachedAreaCode();
return cachedAreaCode.Select(a => a.Code).Where(a => extraAreaCode.Any(e => a.StartsWith(e))).ToList();
}
private async Task<List<string>> GetUserDataScopeTypeAreaList(string orgAreaCode, List<int> roleDataTypeList)
{

View File

@@ -17,12 +17,14 @@ namespace Ewide.Core.Service.Area
private readonly IRepository<SysAreaCode> _areaCodeRep;
private readonly IRepository<SysOrg> _sysOrgRep;
private readonly ISysCacheService _sysCacheService;
private readonly IUserManager _userManager;
public AreaCodeService(IRepository<SysAreaCode> AreaCodeRep, ISysCacheService sysCacheService, IRepository<SysOrg> sysOrgRep)
public AreaCodeService(IRepository<SysAreaCode> AreaCodeRep, ISysCacheService sysCacheService, IRepository<SysOrg> sysOrgRep, IUserManager userManager)
{
_areaCodeRep = AreaCodeRep;
_sysCacheService = sysCacheService;
_sysOrgRep = sysOrgRep;
_userManager = userManager;
}
/// <summary>
/// 添加一个区域
@@ -76,44 +78,6 @@ namespace Ewide.Core.Service.Area
}
return cachedAreaCodes.FirstOrDefault(a => a.Code == code);
}
/// <summary>
/// 获取区域目录树
/// </summary>
/// <returns></returns>
public async Task<List<AreaTreeNode>> GetAreaCodeTree(int? level, List<string> areaCodeList)
{
level = level.GetValueOrDefault(100);
var cachedAreaCodes = await _sysCacheService.GetAreaCode();
if (cachedAreaCodes == null || cachedAreaCodes.Count < 0)
{
cachedAreaCodes = await _areaCodeRep.DetachedEntities.ToListAsync();
#if DEBUG
#else
await _sysCacheService.SetAreaCode(cachedAreaCodes);
#endif
}
var query = cachedAreaCodes.Where(p => p.LevelType <= level);
var resAreaCode = new List<SysAreaCode>();
if (areaCodeList != null)
{
foreach (var code in areaCodeList)
{
var queryRes = query.Where(p => p.Code.StartsWith(code));
resAreaCode.AddRange(queryRes);
}
cachedAreaCodes = resAreaCode.Distinct().ToList();
}
return new TreeBuildUtil<AreaTreeNode>().DoTreeBuild(cachedAreaCodes.Select(u => new AreaTreeNode
{
Code = u.Code,
AdCode = u.AdCode,
ParentCode = u.ParentCode,
Name = u.Name,
LevelType = u.LevelType,
Note = u.Note
}).ToList());
}
public async Task<List<SysAreaCode>> GetAreaCodeWithChildren(string code)
{
@@ -183,5 +147,37 @@ namespace Ewide.Core.Service.Area
{
return await _sysOrgRep.DetachedEntities.Where(p => orgIdList.Contains(p.Id)).Select(p => p.AreaCode).Distinct().ToListAsync();
}
/// <summary>
/// 获取区域目录树
/// </summary>
/// <returns></returns>
public async Task<List<AreaTreeNode>> GetAreaCodeTree(int? level)
{
level = level.GetValueOrDefault(100);
var cachedAreaCodes = await _sysCacheService.GetAreaCode();
if (cachedAreaCodes == null || cachedAreaCodes.Count < 0)
{
cachedAreaCodes = await _areaCodeRep.DetachedEntities.ToListAsync();
#if DEBUG
#else
await _sysCacheService.SetAreaCode(cachedAreaCodes);
#endif
}
if (!_userManager.SuperAdmin)
{
var userAreaList = await _userManager.GetUserAllAreaList();
cachedAreaCodes = cachedAreaCodes.Where(a => userAreaList.Contains(a.Code)).ToList();
}
return new TreeBuildUtil<AreaTreeNode>().DoTreeBuild(cachedAreaCodes.Select(u => new AreaTreeNode
{
Code = u.Code,
AdCode = u.AdCode,
ParentCode = u.ParentCode,
Name = u.Name,
LevelType = u.LevelType,
Note = u.Note
}).ToList());
}
}
}

View File

@@ -16,7 +16,7 @@ namespace Ewide.Core.Service.Area
Task<SysAreaCode> GetAreaCode(string code);
Task<List<SysAreaCode>> GetAreaCodeWithChildren(string code);
Task<List<AreaTreeNode>> GetAreaCodeTree(int? level,List<string> areaCodeList);
Task<List<AreaTreeNode>> GetAreaCodeTree(int? level);
Task<dynamic> QueryAreaCodePageList([FromQuery] AreaCodeInput input);