🍅 refactor(cache): 清空缓存时,非超管用户禁止清空非本租户的用户Session

This commit is contained in:
喵你个汪呀 2025-08-24 14:05:28 +08:00
parent 768cad6ddc
commit 183e2acfe1

View File

@ -12,11 +12,17 @@ namespace Admin.NET.Core.Service;
[ApiDescriptionSettings(Order = 400, Description = "系统缓存")]
public class SysCacheService : IDynamicApiController, ISingleton
{
private readonly Lazy<UserManager> _userManager = new(() => App.GetService<UserManager>());
private readonly SqlSugarRepository<SysUser> _sysUserRep;
private static ICacheProvider _cacheProvider;
private readonly CacheOptions _cacheOptions;
public SysCacheService(ICacheProvider cacheProvider, IOptions<CacheOptions> cacheOptions)
public SysCacheService(
ICacheProvider cacheProvider,
IOptions<CacheOptions> cacheOptions,
SqlSugarRepository<SysUser> sysUserRep)
{
_sysUserRep = sysUserRep;
_cacheProvider = cacheProvider;
_cacheOptions = cacheOptions.Value;
}
@ -428,9 +434,18 @@ public class SysCacheService : IDynamicApiController, ISingleton
[ApiDescriptionSettings(Name = "Clear"), HttpPost]
public void Clear()
{
_cacheProvider.Cache.Clear();
// 超管用户操作,清空所有缓存
if (_userManager.Value.SuperAdmin)
{
_cacheProvider.Cache.Clear();
Cache.Default.Clear();
return;
}
Cache.Default.Clear();
// 排除非本租户、以及超管的Session缓存
var userIds = _sysUserRep.AsQueryable().Where(u => u.AccountType != AccountTypeEnum.SuperAdmin).Select(u => u.Id).ToList().Select(u => u.ToString()).ToList();
var keys = _cacheProvider.Cache.Keys.Where(key => !key.StartsWith(CacheConst.KeyUserSession) || userIds.Any(key.EndsWith)).ToList();
keys.ForEach(key => _cacheProvider.Cache.Remove(key));
}
/// <summary>