diff --git a/Admin.NET/Admin.NET.Core/Const/CacheConst.cs b/Admin.NET/Admin.NET.Core/Const/CacheConst.cs index 83ed171c..673ce30e 100644 --- a/Admin.NET/Admin.NET.Core/Const/CacheConst.cs +++ b/Admin.NET/Admin.NET.Core/Const/CacheConst.cs @@ -41,6 +41,11 @@ public class CacheConst /// public const string KeyUserOrg = "sys_user_org:"; + /// + /// 用户角色缓存 + /// + public const string KeyUserRole = "sys_user_role:"; + /// /// 角色最大数据范围缓存 /// diff --git a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs index 27dc710f..4ac9f4d3 100644 --- a/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs @@ -500,6 +500,7 @@ public class SysRoleService : IDynamicApiController, ITransient foreach (var userId in userIdList) { _sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}"); + _sysCacheService.Remove($"{CacheConst.KeyUserRole}{userId}"); } } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs b/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs index 638f3fc5..357f63ca 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/SysUserRoleService.cs @@ -40,6 +40,7 @@ public class SysUserRoleService : ITransient // 清除缓存 _sysCacheService.Remove($"{CacheConst.KeyUserApi}{input.UserId}"); + _sysCacheService.Remove($"{CacheConst.KeyUserRole}{input.UserId}"); } /// @@ -62,6 +63,7 @@ public class SysUserRoleService : ITransient foreach (var userId in input.UserIdList) { _sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}"); + _sysCacheService.Remove($"{CacheConst.KeyUserRole}{userId}"); } } @@ -72,15 +74,12 @@ public class SysUserRoleService : ITransient /// public async Task DeleteUserRoleByRoleId(long roleId) { - var userIdList = await _sysUserRoleRep.AsQueryable() - .Where(u => u.RoleId == roleId) - .Select(u => u.UserId) - .ToListAsync(); - + var userIdList = await _sysUserRoleRep.AsQueryable().Where(u => u.RoleId == roleId).Select(u => u.UserId).ToListAsync(); // 清除缓存 foreach (var userId in userIdList) { _sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}"); + _sysCacheService.Remove($"{CacheConst.KeyUserRole}{userId}"); } await _sysUserRoleRep.DeleteAsync(u => u.RoleId == roleId); @@ -97,6 +96,7 @@ public class SysUserRoleService : ITransient // 清除缓存 _sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}"); + _sysCacheService.Remove($"{CacheConst.KeyUserRole}{userId}"); } /// @@ -106,8 +106,7 @@ public class SysUserRoleService : ITransient /// public async Task> GetUserRoleList(long userId) { - var sysUserRoleList = await _sysUserRoleRep.AsQueryable().Includes(u => u.SysRole) - .Where(u => u.UserId == userId).ToListAsync(); + var sysUserRoleList = await _sysUserRoleRep.AsQueryable().Includes(u => u.SysRole).Where(u => u.UserId == userId).ToListAsync(); return sysUserRoleList.Where(u => u.SysRole != null).Select(u => u.SysRole).ToList(); } @@ -118,8 +117,12 @@ public class SysUserRoleService : ITransient /// public async Task> GetUserRoleIdList(long userId) { - return await _sysUserRoleRep.AsQueryable() - .Where(u => u.UserId == userId).Select(u => u.RoleId).ToListAsync(); + var roleIds = _sysCacheService.Get>($"{CacheConst.KeyUserRole}{userId}"); + if (roleIds != null) return roleIds; + + roleIds = await _sysUserRoleRep.AsQueryable().Where(u => u.UserId == userId).Select(u => u.RoleId).ToListAsync(); + _sysCacheService.Set($"{CacheConst.KeyUserRole}{userId}", roleIds); + return roleIds; } /// @@ -142,7 +145,6 @@ public class SysUserRoleService : ITransient /// public async Task> GetUserIdList(long roleId) { - return await _sysUserRoleRep.AsQueryable() - .Where(u => u.RoleId == roleId).Select(u => u.UserId).ToListAsync(); + return await _sysUserRoleRep.AsQueryable().Where(u => u.RoleId == roleId).Select(u => u.UserId).ToListAsync(); } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs b/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs index 654ecd51..a4bc14f1 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs @@ -91,16 +91,16 @@ public class UserManager(IHttpContextAccessor httpContextAccessor, SysCacheServi /// public string OpenId => httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.OpenId)?.Value; - ///// - ///// 角色Id集合 - ///// - //public List RoleIds - //{ - // get - // { - // return sysCacheService.Get>($"{CacheConst.KeyUserOrg}{UserId}"); - // } - //} + /// + /// 角色Id集合 + /// + public List RoleIds + { + get + { + return sysCacheService.Get>($"{CacheConst.KeyUserRole}{UserId}"); + } + } /// /// 机构Id集合 @@ -114,7 +114,7 @@ public class UserManager(IHttpContextAccessor httpContextAccessor, SysCacheServi } /// - /// 权限集合 + /// 权限集合(接口按钮) /// public List> Permissions { diff --git a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.cs b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.cs index 51e00d7d..982f63fc 100644 --- a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.cs +++ b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.cs @@ -24,10 +24,12 @@ public static class SqlSugarFilter // 删除用户机构集合缓存 sysCacheService.Remove($"{CacheConst.KeyUserOrg}{userId}"); + // 删除用户权限集合缓存(接口按钮) + sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}"); + // 删除用户角色集合缓存 + sysCacheService.Remove($"{CacheConst.KeyUserRole}{userId}"); // 删除最大数据权限缓存 sysCacheService.Remove($"{CacheConst.KeyRoleMaxDataScope}{userId}"); - // 用户权限缓存(接口集合) - sysCacheService.Remove($"{CacheConst.KeyUserApi}{userId}"); // 删除用户机构(数据范围)缓存——过滤器 _cache.Remove($"db:{dbConfigId}:orgList:{userId}"); } diff --git a/Web/package.json b/Web/package.json index 2ea5d204..fbfba2e7 100644 --- a/Web/package.json +++ b/Web/package.json @@ -2,7 +2,7 @@ "name": "admin.net.pro", "type": "module", "version": "2.4.33", - "lastBuildTime": "2025.09.14", + "lastBuildTime": "2025.09.15", "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架", "author": "zuohuaijun", "license": "MIT", @@ -20,8 +20,8 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.3.2", - "@logicflow/core": "^2.1.1", - "@logicflow/extension": "^2.1.2", + "@logicflow/core": "^2.1.2", + "@logicflow/extension": "^2.1.3", "@microsoft/signalr": "^9.0.6", "@vue-office/docx": "^1.6.3", "@vue-office/excel": "^1.7.14", @@ -81,7 +81,7 @@ "vue-router": "^4.5.1", "vue-signature-pad": "^3.0.2", "vue3-tree-org": "^4.2.2", - "vxe-pc-ui": "^4.9.28", + "vxe-pc-ui": "^4.9.29", "vxe-table": "^4.16.11", "xe-utils": "^3.7.9", "xlsx-js-style": "^1.2.0"