Squashed commit of the following:
commitae30d4b2cbAuthor: 陈淳 <454313500@qq.com> Date: Fri Apr 26 19:08:18 2024 +0800 fix: 修复值对象查询导致问题,已同步sqlsugar更新 commit4c12626b44Author: 陈淳 <454313500@qq.com> Date: Mon Apr 22 18:15:57 2024 +0800 feat: 添加值对象 commitd389dcbedfAuthor: 陈淳 <454313500@qq.com> Date: Mon Apr 22 18:06:09 2024 +0800 feat: 添加值对象 commit58ff8f45cfAuthor: 陈淳 <454313500@qq.com> Date: Mon Apr 22 15:54:25 2024 +0800 feat: 去除新增的缓存操作 commit826271c84dAuthor: 陈淳 <454313500@qq.com> Date: Mon Apr 22 15:39:41 2024 +0800 feat: 添加缓存crud
This commit is contained in:
@@ -4,6 +4,7 @@ using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core.Data;
|
||||
using Yi.Framework.Core.Helper;
|
||||
using Yi.Framework.Rbac.Domain.Entities.ValueObjects;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Enums;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
@@ -22,7 +23,7 @@ namespace Yi.Framework.Rbac.Domain.Entities
|
||||
public UserEntity(string userName, string password, long phone, string nick = "萌新")
|
||||
{
|
||||
UserName = userName;
|
||||
Password = password;
|
||||
EncryPassword.Password = password;
|
||||
Phone = phone;
|
||||
Nick = nick;
|
||||
BuildPassword();
|
||||
@@ -55,14 +56,20 @@ namespace Yi.Framework.Rbac.Domain.Entities
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 密码
|
||||
/// 加密密码
|
||||
/// </summary>
|
||||
public string Password { get; set; } = string.Empty;
|
||||
[SugarColumn(IsOwnsOne = true)]
|
||||
public EncryPasswordValueObject EncryPassword { get; set; } = new EncryPasswordValueObject();
|
||||
|
||||
/// <summary>
|
||||
/// 加密盐值
|
||||
/// </summary>
|
||||
public string Salt { get; set; } = string.Empty;
|
||||
///// <summary>
|
||||
///// 密码
|
||||
///// </summary>
|
||||
//public string Password { get; set; } = string.Empty;
|
||||
|
||||
///// <summary>
|
||||
///// 加密盐值
|
||||
///// </summary>
|
||||
//public string Salt { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 头像
|
||||
@@ -175,14 +182,14 @@ namespace Yi.Framework.Rbac.Domain.Entities
|
||||
//如果不传值,那就把自己的password当作传进来的password
|
||||
if (password == null)
|
||||
{
|
||||
if (Password == null)
|
||||
if (EncryPassword?.Password == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(Password));
|
||||
throw new ArgumentNullException(nameof(EncryPassword.Password));
|
||||
}
|
||||
password = Password;
|
||||
password = EncryPassword.Password;
|
||||
}
|
||||
Salt = MD5Helper.GenerateSalt();
|
||||
Password = MD5Helper.SHA2Encode(password, Salt);
|
||||
EncryPassword.Salt = MD5Helper.GenerateSalt();
|
||||
EncryPassword.Password = MD5Helper.SHA2Encode(password, EncryPassword.Salt);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -193,12 +200,12 @@ namespace Yi.Framework.Rbac.Domain.Entities
|
||||
/// <returns></returns>
|
||||
public bool JudgePassword(string password)
|
||||
{
|
||||
if (Salt is null)
|
||||
if (EncryPassword.Salt is null)
|
||||
{
|
||||
throw new ArgumentNullException(Salt);
|
||||
throw new ArgumentNullException(EncryPassword.Salt);
|
||||
}
|
||||
var p = MD5Helper.SHA2Encode(password, Salt);
|
||||
if (Password == MD5Helper.SHA2Encode(password, Salt))
|
||||
var p = MD5Helper.SHA2Encode(password, EncryPassword.Salt);
|
||||
if (EncryPassword.Password == MD5Helper.SHA2Encode(password, EncryPassword.Salt))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Volo.Abp.Domain.Values;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities.ValueObjects
|
||||
{
|
||||
public class EncryPasswordValueObject : ValueObject
|
||||
{
|
||||
public EncryPasswordValueObject() { }
|
||||
public EncryPasswordValueObject(string password) { this.Password = password; }
|
||||
|
||||
/// <summary>
|
||||
/// 密码
|
||||
/// </summary>
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 加密盐值
|
||||
/// </summary>
|
||||
public string Salt { get; set; } = string.Empty;
|
||||
|
||||
protected override IEnumerable<object> GetAtomicValues()
|
||||
{
|
||||
yield return Password;
|
||||
yield return Salt;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -154,7 +154,7 @@ namespace Yi.Framework.Rbac.Domain.Managers
|
||||
{
|
||||
userAction.Invoke(user);
|
||||
}
|
||||
if (user.Password == MD5Helper.SHA2Encode(password, user.Salt))
|
||||
if (user.EncryPassword.Password == MD5Helper.SHA2Encode(password, user.EncryPassword.Salt))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -247,7 +247,7 @@ namespace Yi.Framework.Rbac.Domain.Managers
|
||||
{
|
||||
throw new UserFriendlyException("无效更新!原密码错误!");
|
||||
}
|
||||
user.Password = newPassword;
|
||||
user.EncryPassword.Password = newPassword;
|
||||
user.BuildPassword();
|
||||
await _repository.UpdateAsync(user);
|
||||
}
|
||||
@@ -262,7 +262,7 @@ namespace Yi.Framework.Rbac.Domain.Managers
|
||||
{
|
||||
var user = await _repository.GetByIdAsync(userId);
|
||||
// EntityHelper.TrySetId(user, () => GuidGenerator.Create(), true);
|
||||
user.Password = password;
|
||||
user.EncryPassword.Password = password;
|
||||
user.BuildPassword();
|
||||
return await _repository.UpdateAsync(user);
|
||||
}
|
||||
|
||||
@@ -95,42 +95,26 @@ namespace Yi.Framework.Rbac.Domain.Managers
|
||||
/// <returns></returns>
|
||||
public async Task<UserRoleMenuDto> GetInfoAsync(Guid userId)
|
||||
{
|
||||
var user = await _userRepository.GetUserAllInfoAsync(userId);
|
||||
var output = await GetInfoByCacheAsync(user);
|
||||
|
||||
var output = await GetInfoByCacheAsync(userId);
|
||||
return output;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 批量查询用户信息
|
||||
/// </summary>
|
||||
/// <param name="userIds"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<UserRoleMenuDto>> GetInfoListAsync(List<Guid> userIds)
|
||||
{
|
||||
List<UserRoleMenuDto> output = new List<UserRoleMenuDto>();
|
||||
var users = await _userRepository.GetListUserAllInfoAsync(userIds);
|
||||
foreach (var user in users)
|
||||
{
|
||||
output.Add(await GetInfoByCacheAsync(user));
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
private async Task<UserRoleMenuDto> GetInfoByCacheAsync(UserEntity user)
|
||||
private async Task<UserRoleMenuDto> GetInfoByCacheAsync(Guid userId)
|
||||
{
|
||||
//此处优先从缓存中获取
|
||||
UserRoleMenuDto output = null;
|
||||
var tokenExpiresMinuteTime = LazyServiceProvider.GetRequiredService<IOptions<JwtOptions>>().Value.ExpiresMinuteTime;
|
||||
var cacheData = await _userCache.GetOrAddAsync(new UserInfoCacheKey(user.Id),
|
||||
var cacheData = await _userCache.GetOrAddAsync(new UserInfoCacheKey(userId),
|
||||
async () =>
|
||||
{
|
||||
var user = await _userRepository.GetUserAllInfoAsync(userId);
|
||||
var data = EntityMapToDto(user);
|
||||
//系统用户数据被重置,老前端访问重新授权
|
||||
if (data is null)
|
||||
{
|
||||
throw new AbpAuthorizationException();
|
||||
}
|
||||
data.Menus.Clear();
|
||||
//data.Menus.Clear();
|
||||
output = data;
|
||||
return new UserInfoCacheItem(data);
|
||||
},
|
||||
@@ -143,6 +127,24 @@ namespace Yi.Framework.Rbac.Domain.Managers
|
||||
return output!;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 批量查询用户信息
|
||||
/// </summary>
|
||||
/// <param name="userIds"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<UserRoleMenuDto>> GetInfoListAsync(List<Guid> userIds)
|
||||
{
|
||||
List<UserRoleMenuDto> output = new List<UserRoleMenuDto>();
|
||||
foreach (var userId in userIds)
|
||||
{
|
||||
output.Add(await GetInfoByCacheAsync(userId));
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private UserRoleMenuDto EntityMapToDto(UserEntity user)
|
||||
{
|
||||
|
||||
@@ -152,8 +154,8 @@ namespace Yi.Framework.Rbac.Domain.Managers
|
||||
//{
|
||||
// throw new UserFriendlyException($"数据错误,用户id:{nameof(userId)} 不存在,请重新登录");
|
||||
//}
|
||||
user.Password = string.Empty;
|
||||
user.Salt = string.Empty;
|
||||
user.EncryPassword.Password = string.Empty;
|
||||
user.EncryPassword.Salt = string.Empty;
|
||||
|
||||
//超级管理员特殊处理
|
||||
if (UserConst.Admin.Equals(user.UserName))
|
||||
|
||||
Reference in New Issue
Block a user