ソースを参照

😁解决修改用户机构和角色"数据范围"缓存刷新问题

zuohuaijun 2 年 前
コミット
232361205a

+ 4 - 4
Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs

@@ -96,8 +96,8 @@ public class SysOrgService : IDynamicApiController, ITransient
             //else
             //else
             //    throw Oops.Oh(ErrorCodeEnum.D2006);
             //    throw Oops.Oh(ErrorCodeEnum.D2006);
 
 
-            // 删除当前用户机构缓存
-            _sysCacheService.Remove(CacheConst.KeyOrgIdList + _userManager.UserId);
+            // 删除当前用户机构缓存
+            _sysCacheService.Remove($"{CacheConst.KeyOrgIdList}{_userManager.UserId}");
         }
         }
         var sysOrg = input.Adapt<SysOrg>();
         var sysOrg = input.Adapt<SysOrg>();
         var newOrg = await _sysOrgRep.AsInsertable(sysOrg).ExecuteReturnEntityAsync();
         var newOrg = await _sysOrgRep.AsInsertable(sysOrg).ExecuteReturnEntityAsync();
@@ -207,7 +207,7 @@ public class SysOrgService : IDynamicApiController, ITransient
             return new List<long>();
             return new List<long>();
 
 
         var userId = _userManager.UserId;
         var userId = _userManager.UserId;
-        var orgIdList = _sysCacheService.Get<List<long>>(CacheConst.KeyOrgIdList + userId); // 取缓存
+        var orgIdList = _sysCacheService.Get<List<long>>($"{CacheConst.KeyOrgIdList}{userId}"); // 取缓存
         if (orgIdList == null || orgIdList.Count < 1)
         if (orgIdList == null || orgIdList.Count < 1)
         {
         {
             // 扩展机构集合
             // 扩展机构集合
@@ -219,7 +219,7 @@ public class SysOrgService : IDynamicApiController, ITransient
             // 当前所属机构
             // 当前所属机构
             if (!orgIdList.Contains(_userManager.OrgId))
             if (!orgIdList.Contains(_userManager.OrgId))
                 orgIdList.Add(_userManager.OrgId);
                 orgIdList.Add(_userManager.OrgId);
-            _sysCacheService.Set(CacheConst.KeyOrgIdList + userId, orgIdList); // 存缓存
+            _sysCacheService.Set($"{CacheConst.KeyOrgIdList}{userId}", orgIdList); // 存缓存
         }
         }
         return orgIdList;
         return orgIdList;
     }
     }

+ 6 - 2
Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs

@@ -164,8 +164,12 @@ public class SysRoleService : IDynamicApiController, ITransient
     [DisplayName("授权角色数据范围")]
     [DisplayName("授权角色数据范围")]
     public async Task GrantDataScope(RoleOrgInput input)
     public async Task GrantDataScope(RoleOrgInput input)
     {
     {
-        // 删除所有用户机构缓存
-        _sysCacheService.RemoveByPrefixKey(CacheConst.KeyOrgIdList);
+        // 删除与该角色相关的用户机构缓存
+        var userIdList = await _sysUserRoleService.GetUserIdList(input.Id);
+        foreach (var userId in userIdList)
+        {
+            SqlSugarFilter.DeleteUserOrgCache(input.Id, _sysRoleRep.Context.CurrentConnectionConfig.ConfigId);
+        }
 
 
         var role = await _sysRoleRep.GetFirstAsync(u => u.Id == input.Id);
         var role = await _sysRoleRep.GetFirstAsync(u => u.Id == input.Id);
         var dataScope = input.DataScope;
         var dataScope = input.DataScope;

+ 11 - 0
Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs

@@ -83,4 +83,15 @@ public class SysUserRoleService : ITransient
         return await _sysUserRoleRep.AsQueryable()
         return await _sysUserRoleRep.AsQueryable()
             .Where(u => u.UserId == userId).Select(u => u.RoleId).ToListAsync();
             .Where(u => u.UserId == userId).Select(u => u.RoleId).ToListAsync();
     }
     }
+
+    /// <summary>
+    /// 根据角色Id获取用户Id集合
+    /// </summary>
+    /// <param name="roleId"></param>
+    /// <returns></returns>
+    public async Task<List<long>> GetUserIdList(long roleId)
+    {
+        return await _sysUserRoleRep.AsQueryable()
+            .Where(u => u.RoleId == roleId).Select(u => u.UserId).ToListAsync();
+    }
 }
 }

+ 17 - 14
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -90,18 +90,6 @@ public class SysUserService : IDynamicApiController, ITransient
         await UpdateRoleAndExtOrg(input);
         await UpdateRoleAndExtOrg(input);
     }
     }
 
 
-    /// <summary>
-    /// 更新角色和扩展机构
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    private async Task UpdateRoleAndExtOrg(AddUserInput input)
-    {
-        await GrantRole(new UserRoleInput { UserId = input.Id, RoleIdList = input.RoleIdList });
-
-        await _sysUserExtOrgService.UpdateUserExtOrg(input.Id, input.ExtOrgIdList);
-    }
-
     /// <summary>
     /// <summary>
     /// 更新用户
     /// 更新用户
     /// </summary>
     /// </summary>
@@ -112,13 +100,28 @@ public class SysUserService : IDynamicApiController, ITransient
     [DisplayName("更新用户")]
     [DisplayName("更新用户")]
     public async Task UpdateUser(UpdateUserInput input)
     public async Task UpdateUser(UpdateUserInput input)
     {
     {
-        var isExist = await _sysUserRep.AsQueryable().Filter(null, true).AnyAsync(u => u.Account == input.Account && u.Id != input.Id);
-        if (isExist) throw Oops.Oh(ErrorCodeEnum.D1003);
+        if (await _sysUserRep.AsQueryable().Filter(null, true).AnyAsync(u => u.Account == input.Account && u.Id != input.Id))
+            throw Oops.Oh(ErrorCodeEnum.D1003);
 
 
         await _sysUserRep.AsUpdateable(input.Adapt<SysUser>()).IgnoreColumns(true)
         await _sysUserRep.AsUpdateable(input.Adapt<SysUser>()).IgnoreColumns(true)
             .IgnoreColumns(u => new { u.AccountType, u.Password, u.Status }).ExecuteCommandAsync();
             .IgnoreColumns(u => new { u.AccountType, u.Password, u.Status }).ExecuteCommandAsync();
 
 
         await UpdateRoleAndExtOrg(input);
         await UpdateRoleAndExtOrg(input);
+
+        // 删除用户机构缓存
+        SqlSugarFilter.DeleteUserOrgCache(input.Id, _sysUserRep.Context.CurrentConnectionConfig.ConfigId);
+    }
+
+    /// <summary>
+    /// 更新角色和扩展机构
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    private async Task UpdateRoleAndExtOrg(AddUserInput input)
+    {
+        await GrantRole(new UserRoleInput { UserId = input.Id, RoleIdList = input.RoleIdList });
+
+        await _sysUserExtOrgService.UpdateUserExtOrg(input.Id, input.ExtOrgIdList);
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 13 - 0
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.cs

@@ -16,6 +16,19 @@ public static class SqlSugarFilter
     /// </summary>
     /// </summary>
     private static readonly ICache _cache = Cache.Default;
     private static readonly ICache _cache = Cache.Default;
 
 
+    /// <summary>
+    /// 删除用户机构缓存
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <param name="dbConfigId"></param>
+    public static void DeleteUserOrgCache(long userId, string dbConfigId)
+    {
+        // 删除用户机构集合缓存
+        App.GetService<SysCacheService>().Remove($"{CacheConst.KeyOrgIdList}{userId}");
+        // 删除用户机构(数据范围)过滤器缓存
+        SqlSugarFilter._cache.Remove($"db:{dbConfigId}:orgList:{userId}");
+    }
+
     /// <summary>
     /// <summary>
     /// 配置用户机构集合过滤器
     /// 配置用户机构集合过滤器
     /// </summary>
     /// </summary>