优化令牌版本更新机制。
This commit is contained in:
parent
8a51d57fa0
commit
bfc88b44b2
@ -352,8 +352,8 @@ public class SysAuthService : IDynamicApiController, ITransient
|
|||||||
// .Where(u => u.Id == _userManager.UserId)
|
// .Where(u => u.Id == _userManager.UserId)
|
||||||
// .ExecuteCommandAsync();
|
// .ExecuteCommandAsync();
|
||||||
|
|
||||||
// 更新用户Token版本缓存
|
//// 更新用户Token版本缓存 退出系统不用更新系统缓存,更新后其他已登录机全都要重新登录。
|
||||||
_sysCacheService.Set($"{CacheConst.KeyUserToken}{_userManager.UserId}", $"{_userManager.TokenVersion + 1}");
|
//_sysCacheService.Set($"{CacheConst.KeyUserToken}{_userManager.UserId}", $"{_userManager.TokenVersion + 1}");
|
||||||
|
|
||||||
// 发布系统退出事件
|
// 发布系统退出事件
|
||||||
await _eventPublisher.PublishAsync(UserEventTypeEnum.Logout, _userManager);
|
await _eventPublisher.PublishAsync(UserEventTypeEnum.Logout, _userManager);
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Admin.NET.Core.Service;
|
namespace Admin.NET.Core.Service;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -140,7 +142,8 @@ public class SysUserService : IDynamicApiController, ITransient
|
|||||||
if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
|
if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
|
||||||
if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
|
if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
|
||||||
|
|
||||||
input.TokenVersion++;
|
////更新用户普通信息时不因更新TokenVersion
|
||||||
|
//input.TokenVersion++;
|
||||||
var user = input.Adapt<SysUser>();
|
var user = input.Adapt<SysUser>();
|
||||||
await _sysUserRep.AsUpdateable(user).IgnoreColumns(true).IgnoreColumns(u => new { u.Password, u.Status, u.TenantId }).ExecuteCommandAsync();
|
await _sysUserRep.AsUpdateable(user).IgnoreColumns(true).IgnoreColumns(u => new { u.Password, u.Status, u.TenantId }).ExecuteCommandAsync();
|
||||||
|
|
||||||
@ -287,13 +290,16 @@ public class SysUserService : IDynamicApiController, ITransient
|
|||||||
{
|
{
|
||||||
var user = await _sysUserRep.GetByIdAsync(input.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D0009);
|
var user = await _sysUserRep.GetByIdAsync(input.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D0009);
|
||||||
|
|
||||||
await _sysUserRoleService.GrantUserRole(input);
|
// 若账号的角色发生变化,才更新
|
||||||
|
var roles = await _sysUserRoleService.GetUserRoleIdList(input.UserId);
|
||||||
// 强制下线账号和失效Token
|
if(!roles.SequenceEqual(input.RoleIdList))
|
||||||
await OfflineAndExpireToken(user);
|
{
|
||||||
|
await _sysUserRoleService.GrantUserRole(input);
|
||||||
// 发布更新用户角色事件
|
// 强制下线账号和失效Token
|
||||||
await _eventPublisher.PublishAsync(UserEventTypeEnum.UpdateRole, input);
|
await OfflineAndExpireToken(user);
|
||||||
|
// 发布更新用户角色事件
|
||||||
|
await _eventPublisher.PublishAsync(UserEventTypeEnum.UpdateRole, input);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -461,8 +467,8 @@ public class SysUserService : IDynamicApiController, ITransient
|
|||||||
/// <param name="user"></param>
|
/// <param name="user"></param>
|
||||||
private async Task OfflineAndExpireToken(SysUser user)
|
private async Task OfflineAndExpireToken(SysUser user)
|
||||||
{
|
{
|
||||||
// 更新Token版本缓存
|
// 更新Token版本缓存,当角色、机构、密码、重置、删除、状态改变时,Token版本清0
|
||||||
_sysCacheService.Set($"{CacheConst.KeyUserToken}{user.Id}", $"{user.TokenVersion + 1}");
|
_sysCacheService.Remove($"{CacheConst.KeyUserToken}{user.Id}");
|
||||||
|
|
||||||
// 强制下线账号
|
// 强制下线账号
|
||||||
await _sysOnlineUserService.ForceOfflineByUserId(user.Id);
|
await _sysOnlineUserService.ForceOfflineByUserId(user.Id);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user