Просмотр исходного кода

当用户被删除或者禁用时,踢掉此用户。

Signed-off-by: IMaster <logole@live.cn>
IMaster 2 лет назад
Родитель
Сommit
cb67472718

+ 15 - 1
Admin.NET/Admin.NET.Core/Service/OnlineUser/SysOnlineUserService.cs

@@ -1,4 +1,4 @@
-// 麻省理工学院许可证
+// 麻省理工学院许可证
 //
 // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  联系电话/微信:18020030720  QQ:515096995
 //
@@ -89,4 +89,18 @@ public class SysOnlineUserService : IDynamicApiController, ITransient
             await ForceOffline(user);
         }
     }
+
+    /// <summary>
+    /// 通过用户编号踢掉在线用户
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    [NonAction]
+    public async Task DisableLogin(long userId)
+    {
+        var user = await _sysOnlineUerRep.GetFirstAsync(u => u.UserId == userId);
+        if (user == null) return;
+
+        await ForceOffline(user);
+    }
 }

+ 8 - 0
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -150,6 +150,8 @@ public class SysUserService : IDynamicApiController, ITransient
         if (user.Id == _userManager.UserId)
             throw Oops.Oh(ErrorCodeEnum.D1001);
 
+        await App.GetService<SysOnlineUserService>().DisableLogin(user.Id);
+
         await _sysUserRep.DeleteAsync(user);
 
         // 删除用户角色
@@ -199,9 +201,15 @@ public class SysUserService : IDynamicApiController, ITransient
         // 账号禁用则增加黑名单,账号启用则移除黑名单
         var sysCacheService = App.GetService<SysCacheService>();
         if (input.Status == StatusEnum.Disable)
+        {
             sysCacheService.Set($"{CacheConst.KeyBlacklist}{user.Id}", $"{user.RealName}-{user.Phone}");
+            
+            await App.GetService<SysOnlineUserService>().DisableLogin(user.Id);
+        }
         else
+        {
             sysCacheService.Remove($"{CacheConst.KeyBlacklist}{user.Id}");
+        }
 
         user.Status = input.Status;
         return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => new { u.Status }).ExecuteCommandAsync();