mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-11-09 19:04:44 +08:00
🐛fix: #ICGHSO 修复因统一Sqlsugar引起的BUG
This commit is contained in:
@@ -100,6 +100,15 @@ namespace OpenAuth.App.Test
|
|||||||
Console.WriteLine($"添加数据库连接: {conn.Key} / {(dbtypes.ContainsKey(conn.Key) ? dbtypes[conn.Key] : "未指定类型")},连接字符串:{conn.Value}");
|
Console.WriteLine($"添加数据库连接: {conn.Key} / {(dbtypes.ContainsKey(conn.Key) ? dbtypes[conn.Key] : "未指定类型")},连接字符串:{conn.Value}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//通过ConfigId为空判断是否有默认的连接字符串
|
||||||
|
if(!connectionConfigs.Any(x => x.ConfigId == null))
|
||||||
|
{
|
||||||
|
throw new Exception($"没有找到默认的连接字符串:{Define.DEFAULT_TENANT_ID}");
|
||||||
|
}
|
||||||
|
|
||||||
|
//把connectionConfigs排序,ConfigId为空的放在最前面,即默认的连接字符串必须排最前面
|
||||||
|
connectionConfigs = connectionConfigs.OrderBy(x => x.ConfigId == null ? 0 : 1).ToList();
|
||||||
|
|
||||||
var sqlSugar = new SqlSugarClient(connectionConfigs);
|
var sqlSugar = new SqlSugarClient(connectionConfigs);
|
||||||
|
|
||||||
// 配置PostgreSQL数据库处理
|
// 配置PostgreSQL数据库处理
|
||||||
|
|||||||
@@ -42,29 +42,42 @@ namespace OpenAuth.App
|
|||||||
var query = SugarClient.Queryable<SysUser>();
|
var query = SugarClient.Queryable<SysUser>();
|
||||||
if (!string.IsNullOrEmpty(request.key))
|
if (!string.IsNullOrEmpty(request.key))
|
||||||
{
|
{
|
||||||
query = SugarClient.Queryable<SysUser>().Where(u => u.Name.Contains(request.key) || u.Account.Contains(request.key));
|
query = query.Where(u => u.Name.Contains(request.key) || u.Account.Contains(request.key));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var orgs = SugarClient.Queryable<SysOrg>();
|
||||||
|
if(!ignoreAuth) //如果没有忽略权限,则只能访问自己所在的机构
|
||||||
|
{
|
||||||
|
var orgIds = loginUser.Orgs.Select(u => u.Id).ToArray();
|
||||||
|
orgs = orgs.Where(u => orgIds.Contains(u.Id));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!string.IsNullOrEmpty(request.orgId)) //如果请求的orgId不为空,加载这个机构及该机构下级的所有用户
|
||||||
|
{
|
||||||
|
var reqorg = SugarClient.Queryable<SysOrg>().First(u => u.Id == request.orgId);
|
||||||
|
var cascadeId = reqorg.CascadeId;
|
||||||
|
var orgIds = orgs.Where(u => u.CascadeId.Contains(cascadeId)).Select(u => u.Id).ToArray();
|
||||||
|
var userIds = SugarClient.Queryable<Relevance>().Where(r => r.RelKey == Define.USERORG
|
||||||
|
&& orgIds.Contains(r.SecondId)).Select(r => r.FirstId).Distinct().ToList();
|
||||||
|
query = query.Where(u => userIds.Contains(u.Id));
|
||||||
|
|
||||||
|
}else{
|
||||||
|
if(!ignoreAuth) //如果没有忽略权限,则根据用户所在的机构获取用户
|
||||||
|
{
|
||||||
|
var orgIds = orgs.Select(o => o.Id).ToArray();
|
||||||
|
var userIds = SugarClient.Queryable<Relevance>().Where(r => r.RelKey == Define.USERORG
|
||||||
|
&& orgIds.Contains(r.SecondId)).Select(r => r.FirstId).Distinct().ToList();
|
||||||
|
query = query.Where(u => userIds.Contains(u.Id));
|
||||||
|
}
|
||||||
|
|
||||||
|
//没有限制权限、没有传入orgId,则query就是获取最原始的所有用户
|
||||||
|
}
|
||||||
|
|
||||||
var userOrgs = query
|
var userOrgs = query
|
||||||
.LeftJoin<SysUser>((user, u) => user.ParentId == u.Id)
|
.LeftJoin<SysUser>((user, u) => user.ParentId == u.Id)
|
||||||
.LeftJoin<Relevance>((user, u, r) => user.Id == r.FirstId && r.RelKey == Define.USERORG)
|
.LeftJoin<Relevance>((user, u, r) => user.Id == r.FirstId && r.RelKey == Define.USERORG)
|
||||||
.LeftJoin<SysOrg>((user, u, r, o) => r.SecondId == o.Id);
|
.LeftJoin<SysOrg>((user, u, r, o) => r.SecondId == o.Id);
|
||||||
|
|
||||||
//如果请求的orgId不为空,加载用户可以看到的机构及下级的所有用户
|
|
||||||
if (!string.IsNullOrEmpty(request.orgId))
|
|
||||||
{
|
|
||||||
var org = loginUser.Orgs.SingleOrDefault(u => u.Id == request.orgId);
|
|
||||||
var cascadeId = org.CascadeId;
|
|
||||||
var orgIds = loginUser.Orgs.Where(u => u.CascadeId.Contains(cascadeId)).Select(u => u.Id).ToArray();
|
|
||||||
//只获取机构里面的用户
|
|
||||||
userOrgs = userOrgs.Where((user, u, r, o) => r.RelKey == Define.USERORG && orgIds.Contains(o.Id));
|
|
||||||
}
|
|
||||||
else if (!ignoreAuth) //如果请求的orgId为空,即为跟节点,如果不忽略权限,只能获取到用户可以看到的机构及未分配机构的用户
|
|
||||||
{
|
|
||||||
var orgIds = loginUser.Orgs.Select(u => u.Id).ToArray();
|
|
||||||
//获取用户可以访问的机构的用户和没有任何机构关联的用户(机构被删除后,没有删除这里面的关联关系)
|
|
||||||
userOrgs = userOrgs.Where((user, u, r, o) => (r.RelKey == Define.USERORG && orgIds.Contains(o.Id)) || (o == null));
|
|
||||||
}
|
|
||||||
|
|
||||||
var userOrgsResult = userOrgs.Select((user, u, r, o) => new
|
var userOrgsResult = userOrgs.Select((user, u, r, o) => new
|
||||||
{
|
{
|
||||||
Account = user.Account,
|
Account = user.Account,
|
||||||
|
|||||||
Reference in New Issue
Block a user