Bläddra i källkod

feat: 😀增加用户登录,退出事件

喵你个旺呀 1 år sedan
förälder
incheckning
d52270e7bc

+ 12 - 0
Admin.NET/Admin.NET.Core/Enum/SysUserEventTypeEnum.cs

@@ -66,4 +66,16 @@ public enum SysUserEventTypeEnum
     /// </summary>
     [Description("注册用户")]
     Register = 999,
+
+    /// <summary>
+    /// 用户登录
+    /// </summary>
+    [Description("用户登录")]
+    Login = 1000,
+
+    /// <summary>
+    /// 用户退出
+    /// </summary>
+    [Description("用户退出")]
+    LoginOut = 1001,
 }

+ 18 - 8
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -26,6 +26,7 @@ public class SysAuthService : IDynamicApiController, ITransient
     private readonly SysSmsService _sysSmsService;
     private readonly SysLdapService _sysLdapService;
     private readonly ICaptcha _captcha;
+    private readonly IEventPublisher _eventPublisher;
     private readonly SysCacheService _sysCacheService;
 
     public SysAuthService(
@@ -34,6 +35,7 @@ public class SysAuthService : IDynamicApiController, ITransient
         SysOnlineUserService sysOnlineUserService,
         SysConfigService sysConfigService,
         SysLdapService sysLdapService,
+        IEventPublisher eventPublisher,
         SysSmsService sysSmsService,
         SysCacheService sysCacheService,
         SysMenuService sysMenuService,
@@ -45,6 +47,7 @@ public class SysAuthService : IDynamicApiController, ITransient
         _sysUserRep = sysUserRep;
         _userManager = userManager;
         _sysSmsService = sysSmsService;
+        _eventPublisher = eventPublisher;
         _sysUserService = sysUserService;
         _sysMenuService = sysMenuService;
         _sysCacheService = sysCacheService;
@@ -266,11 +269,19 @@ public class SysAuthService : IDynamicApiController, ITransient
             u.LastLoginDevice,
         }).ExecuteCommandAsync();
 
-        return new LoginOutput
+        var payload = new
         {
-            AccessToken = accessToken,
-            RefreshToken = refreshToken
+            Entity = user,
+            Output = new LoginOutput
+            {
+                AccessToken = accessToken,
+                RefreshToken = refreshToken
+            }
         };
+
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.Login, payload);
+        return payload.Output;
     }
 
     /// <summary>
@@ -292,8 +303,7 @@ public class SysAuthService : IDynamicApiController, ITransient
             .Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
         // 获取水印文字(若系统水印为空则全局为空)
         var watermarkText = (await _sysUserRep.Context.Queryable<SysTenant>().FirstAsync(u => u.Id == user.TenantId))?.Watermark;
-        if (!string.IsNullOrWhiteSpace(watermarkText))
-            watermarkText += $"-{user.RealName}"; // $"-{user.RealName}-{_httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(true)}-{DateTime.Now}";
+        if (!string.IsNullOrWhiteSpace(watermarkText)) watermarkText += $"-{user.RealName}";
         return new LoginUserOutput
         {
             Id = user.Id,
@@ -335,9 +345,9 @@ public class SysAuthService : IDynamicApiController, ITransient
     [DisplayName("退出系统")]
     public void Logout()
     {
-        if (string.IsNullOrWhiteSpace(_userManager.Account))
-            throw Oops.Oh(ErrorCodeEnum.D1011);
-
+        // 发布系统用户操作事件
+        _ = _eventPublisher.PublishAsync(SysUserEventTypeEnum.LoginOut, new { Entity = _sysUserRep.GetById(_userManager.UserId) });
+        if (string.IsNullOrWhiteSpace(_userManager.Account)) throw Oops.Oh(ErrorCodeEnum.D1011);
         _httpContextAccessor.HttpContext.SignoutToSwagger();
     }