bugfix: linq查询报错&&用户筛选权限后的目录树
This commit is contained in:
@@ -85,12 +85,7 @@ namespace Ewide.Core.Controller
|
|||||||
[HttpGet("/sysArea/tree")]
|
[HttpGet("/sysArea/tree")]
|
||||||
public async Task<List<AreaTreeNode>> GetAreaCodeTree([FromQuery]int? level)
|
public async Task<List<AreaTreeNode>> GetAreaCodeTree([FromQuery]int? level)
|
||||||
{
|
{
|
||||||
List<string> areaCodeList = null;
|
return await _areaCodeService.GetAreaCodeTree(level);
|
||||||
if (!_userManager.SuperAdmin)
|
|
||||||
{
|
|
||||||
areaCodeList = await _userManager.GetUserAllAreaList();
|
|
||||||
}
|
|
||||||
return await _areaCodeService.GetAreaCodeTree(level, areaCodeList);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3149,12 +3149,6 @@
|
|||||||
<param name="code">区域代码</param>
|
<param name="code">区域代码</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:Ewide.Core.Service.Area.AreaCodeService.UpdateAreaCode(Ewide.Core.Service.Area.Dto.AreaCodeInput)">
|
||||||
<summary>
|
<summary>
|
||||||
更新区域信息
|
更新区域信息
|
||||||
@@ -3162,6 +3156,12 @@
|
|||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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">
|
<member name="T:Ewide.Core.Service.AuthService">
|
||||||
<summary>
|
<summary>
|
||||||
登录授权相关服务
|
登录授权相关服务
|
||||||
|
|||||||
@@ -345,9 +345,16 @@ namespace Ewide.Core
|
|||||||
//本部门及以下 或者 本部门区域及以下 树结构显示本级和以下所有区域
|
//本部门及以下 或者 本部门区域及以下 树结构显示本级和以下所有区域
|
||||||
var extraUserArea = await GetUserExtraAreaScopeList(userId);
|
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 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());
|
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)
|
private async Task<List<string>> GetUserDataScopeTypeAreaList(string orgAreaCode, List<int> roleDataTypeList)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,12 +17,14 @@ namespace Ewide.Core.Service.Area
|
|||||||
private readonly IRepository<SysAreaCode> _areaCodeRep;
|
private readonly IRepository<SysAreaCode> _areaCodeRep;
|
||||||
private readonly IRepository<SysOrg> _sysOrgRep;
|
private readonly IRepository<SysOrg> _sysOrgRep;
|
||||||
private readonly ISysCacheService _sysCacheService;
|
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;
|
_areaCodeRep = AreaCodeRep;
|
||||||
_sysCacheService = sysCacheService;
|
_sysCacheService = sysCacheService;
|
||||||
_sysOrgRep = sysOrgRep;
|
_sysOrgRep = sysOrgRep;
|
||||||
|
_userManager = userManager;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加一个区域
|
/// 添加一个区域
|
||||||
@@ -76,44 +78,6 @@ namespace Ewide.Core.Service.Area
|
|||||||
}
|
}
|
||||||
return cachedAreaCodes.FirstOrDefault(a => a.Code == code);
|
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)
|
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();
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace Ewide.Core.Service.Area
|
|||||||
Task<SysAreaCode> GetAreaCode(string code);
|
Task<SysAreaCode> GetAreaCode(string code);
|
||||||
Task<List<SysAreaCode>> GetAreaCodeWithChildren(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);
|
Task<dynamic> QueryAreaCodePageList([FromQuery] AreaCodeInput input);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user