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"