Selaa lähdekoodia

将“根据用户Id获取机构Id集合”拆分成“获取当前登录用户Id获取机构Id集合”和“根据指定用户Id获取机构Id集合”

FunCoder 1 vuosi sitten
vanhempi
commit
85253650d5
1 muutettua tiedostoa jossa 24 lisäystä ja 13 poistoa
  1. 24 13
      Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

+ 24 - 13
Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

@@ -294,7 +294,7 @@ public class SysOrgService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 根据用户Id获取机构Id集合
+    /// 获取当前登录用户Id获取机构Id集合
     /// </summary>
     /// <returns></returns>
     [NonAction]
@@ -302,8 +302,15 @@ public class SysOrgService : IDynamicApiController, ITransient
     {
         if (_userManager.SuperAdmin)
             return new List<long>();
-
-        var userId = _userManager.UserId;
+        return await GetUserOrgIdList(_userManager.UserId, _userManager.OrgId);
+    }
+    /// <summary>
+    /// 根据指定用户Id获取机构Id集合
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public async Task<List<long>> GetUserOrgIdList(long userId, long userOrgId)
+    {
         var orgIdList = _sysCacheService.Get<List<long>>($"{CacheConst.KeyUserOrg}{userId}"); // 取缓存
         if (orgIdList == null || orgIdList.Count < 1)
         {
@@ -312,12 +319,12 @@ public class SysOrgService : IDynamicApiController, ITransient
             // 扩展机构集合
             var orgList1 = await _sysUserExtOrgService.GetUserExtOrgList(userId);
             // 角色机构集合
-            var orgList2 = await GetUserRoleOrgIdList(userId);
+            var orgList2 = await GetUserRoleOrgIdList(userId, userOrgId);
             // 机构并集
             orgIdList = orgList1.Select(u => u.OrgId).Union(orgList2).Union(orgList0).ToList();
             // 当前所属机构
-            if (!orgIdList.Contains(_userManager.OrgId))
-                orgIdList.Add(_userManager.OrgId);
+            if (!orgIdList.Contains(userOrgId))
+                orgIdList.Add(userOrgId);
             _sysCacheService.Set($"{CacheConst.KeyUserOrg}{userId}", orgIdList, TimeSpan.FromDays(7)); // 存缓存
         }
         return orgIdList;
@@ -327,22 +334,25 @@ public class SysOrgService : IDynamicApiController, ITransient
     /// 获取用户角色机构Id集合
     /// </summary>
     /// <param name="userId"></param>
+    /// <param name="userOrgId">用户的机构ID</param>
     /// <returns></returns>
-    private async Task<List<long>> GetUserRoleOrgIdList(long userId)
+    private async Task<List<long>> GetUserRoleOrgIdList(long userId, long userOrgId)
     {
         var roleList = await _sysUserRoleService.GetUserRoleList(userId);
         if (roleList.Count < 1)
             return new List<long>(); // 空机构Id集合
 
-        return await GetUserOrgIdList(roleList);
+        return await GetUserOrgIdList(roleList, userId, userOrgId);
     }
 
     /// <summary>
     /// 根据角色Id集合获取机构Id集合
     /// </summary>
     /// <param name="roleList"></param>
+    /// <param name="userId"></param>
+    /// <param name="userOrgId">用户的机构ID</param>
     /// <returns></returns>
-    private async Task<List<long>> GetUserOrgIdList(List<SysRole> roleList)
+    private async Task<List<long>> GetUserOrgIdList(List<SysRole> roleList, long userId, long userOrgId)
     {
         // 按最大范围策略设定(若同时拥有ALL和SELF权限,则结果ALL)
         int strongerDataScopeType = (int)DataScopeEnum.Self;
@@ -366,14 +376,14 @@ public class SysOrgService : IDynamicApiController, ITransient
                 {
                     strongerDataScopeType = (int)u.DataScope;
                     // 根据数据范围获取机构集合
-                    var orgIds = GetOrgIdListByDataScope(strongerDataScopeType).GetAwaiter().GetResult();
+                    var orgIds = GetOrgIdListByDataScope(userOrgId, strongerDataScopeType).GetAwaiter().GetResult();
                     dataScopeOrgIdList = dataScopeOrgIdList.Union(orgIds).ToList();
                 }
             });
         }
 
         // 缓存当前用户最大角色数据范围
-        _sysCacheService.Set(CacheConst.KeyRoleMaxDataScope + _userManager.UserId, strongerDataScopeType, TimeSpan.FromDays(7));
+        _sysCacheService.Set(CacheConst.KeyRoleMaxDataScope + userId, strongerDataScopeType, TimeSpan.FromDays(7));
 
         // 根据角色集合获取机构集合
         var roleOrgIdList = await _sysRoleOrgService.GetRoleOrgIdList(customDataScopeRoleIdList);
@@ -385,11 +395,12 @@ public class SysOrgService : IDynamicApiController, ITransient
     /// <summary>
     /// 根据数据范围获取机构Id集合
     /// </summary>
+    /// <param name="userOrgId">用户的机构ID</param>
     /// <param name="dataScope"></param>
     /// <returns></returns>
-    private async Task<List<long>> GetOrgIdListByDataScope(int dataScope)
+    private async Task<List<long>> GetOrgIdListByDataScope(long userOrgId, int dataScope)
     {
-        var orgId = _userManager.OrgId;
+        var orgId = userOrgId;//var orgId = _userManager.OrgId;
         var orgIdList = new List<long>();
         // 若数据范围是全部,则获取所有机构Id集合
         if (dataScope == (int)DataScopeEnum.All)