调整项目
This commit is contained in:
parent
fc8fcc7de2
commit
df7c7e0717
@ -14,7 +14,7 @@ public class CreateUserDto
|
|||||||
[Required]
|
[Required]
|
||||||
public string RealName { get; set; } = string.Empty;
|
public string RealName { get; set; } = string.Empty;
|
||||||
|
|
||||||
public string? Phone { get; set; }
|
public string? PhoneNumber { get; set; }
|
||||||
|
|
||||||
public long? TenantId { get; set; }
|
public long? TenantId { get; set; }
|
||||||
|
|
||||||
|
|||||||
@ -10,5 +10,5 @@ public class RoleDto
|
|||||||
public bool IsSystem { get; set; }
|
public bool IsSystem { get; set; }
|
||||||
public List<string>? Permissions { get; set; }
|
public List<string>? Permissions { get; set; }
|
||||||
public int UserCount { get; set; }
|
public int UserCount { get; set; }
|
||||||
public DateTime CreatedAt { get; set; }
|
public DateTimeOffset CreatedAt { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ public class UpdateUserDto
|
|||||||
[Required]
|
[Required]
|
||||||
public string RealName { get; set; } = string.Empty;
|
public string RealName { get; set; } = string.Empty;
|
||||||
|
|
||||||
public string? Phone { get; set; }
|
public string? PhoneNumber { get; set; }
|
||||||
|
|
||||||
public bool EmailConfirmed { get; set; }
|
public bool EmailConfirmed { get; set; }
|
||||||
|
|
||||||
|
|||||||
@ -6,11 +6,11 @@ public class UserDto
|
|||||||
public string? UserName { get; set; }
|
public string? UserName { get; set; }
|
||||||
public string? Email { get; set; }
|
public string? Email { get; set; }
|
||||||
public string? RealName { get; set; }
|
public string? RealName { get; set; }
|
||||||
public string? Phone { get; set; }
|
public string? PhoneNumber { get; set; }
|
||||||
public string TenantCode { get; set; } = "";
|
public string? TenantCode { get; set; } = "";
|
||||||
public string TenantName { get; set; } = "";
|
public string? TenantName { get; set; } = "";
|
||||||
public List<string> Roles { get; set; } = new();
|
public List<string> Roles { get; set; } = new();
|
||||||
public bool EmailConfirmed { get; set; }
|
public bool EmailConfirmed { get; set; }
|
||||||
public bool IsActive { get; set; }
|
public bool IsActive { get; set; }
|
||||||
public DateTime CreatedAt { get; set; }
|
public DateTimeOffset CreatedAt { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -120,14 +120,14 @@ public class RoleService : IRoleService
|
|||||||
foreach (var user in users)
|
foreach (var user in users)
|
||||||
{
|
{
|
||||||
var roles = await _userManager.GetRolesAsync(user);
|
var roles = await _userManager.GetRolesAsync(user);
|
||||||
var tenant = user.TenantInfo.TenantId > 0 ? await _tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null;
|
var tenant = user.TenantInfo?.TenantId > 0 ? await _tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null;
|
||||||
userDtos.Add(new UserDto
|
userDtos.Add(new UserDto
|
||||||
{
|
{
|
||||||
Id = user.Id,
|
Id = user.Id,
|
||||||
UserName = user.UserName,
|
UserName = user.UserName,
|
||||||
Email = user.Email,
|
Email = user.Email,
|
||||||
RealName = user.RealName,
|
RealName = user.RealName,
|
||||||
TenantCode = user.TenantInfo.TenantId.ToString(),
|
TenantCode = user.TenantInfo?.TenantCode,
|
||||||
TenantName = tenant?.Name ?? "",
|
TenantName = tenant?.Name ?? "",
|
||||||
Roles = roles.ToList(),
|
Roles = roles.ToList(),
|
||||||
EmailConfirmed = user.EmailConfirmed,
|
EmailConfirmed = user.EmailConfirmed,
|
||||||
|
|||||||
@ -93,7 +93,7 @@ public class TenantService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
var users = await context.Users
|
var users = await context.Users
|
||||||
.Where(u => u.TenantInfo.TenantId == tenantId)
|
.Where(u => u.TenantInfo!.TenantId == tenantId)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
var userDtos = new List<UserDto>();
|
var userDtos = new List<UserDto>();
|
||||||
|
|||||||
@ -11,7 +11,9 @@ namespace Fengling.Console.Services;
|
|||||||
|
|
||||||
public interface IUserService
|
public interface IUserService
|
||||||
{
|
{
|
||||||
Task<(IEnumerable<UserDto> Items, int TotalCount)> GetUsersAsync(int page, int pageSize, string? userName = null, string? email = null, string? tenantId = null);
|
Task<(IEnumerable<UserDto> Items, int TotalCount)> GetUsersAsync(int page, int pageSize, string? userName = null,
|
||||||
|
string? email = null, string? tenantCode = null);
|
||||||
|
|
||||||
Task<UserDto?> GetUserAsync(long id);
|
Task<UserDto?> GetUserAsync(long id);
|
||||||
Task<UserDto> CreateUserAsync(CreateUserDto dto);
|
Task<UserDto> CreateUserAsync(CreateUserDto dto);
|
||||||
Task<UserDto> UpdateUserAsync(long id, UpdateUserDto dto);
|
Task<UserDto> UpdateUserAsync(long id, UpdateUserDto dto);
|
||||||
@ -27,7 +29,9 @@ public class UserService(
|
|||||||
IHttpContextAccessor httpContextAccessor)
|
IHttpContextAccessor httpContextAccessor)
|
||||||
: IUserService
|
: IUserService
|
||||||
{
|
{
|
||||||
public async Task<(IEnumerable<UserDto> Items, int TotalCount)> GetUsersAsync(int page, int pageSize, string? userName = null, string? email = null, string? tenantId = null)
|
public async Task<(IEnumerable<UserDto> Items, int TotalCount)> GetUsersAsync(int page, int pageSize,
|
||||||
|
string? userName = null, string? email = null,
|
||||||
|
string? tenantCode = null)
|
||||||
{
|
{
|
||||||
var query = context.Users.AsQueryable();
|
var query = context.Users.AsQueryable();
|
||||||
|
|
||||||
@ -41,9 +45,11 @@ public class UserService(
|
|||||||
query = query.Where(u => u.Email != null && u.Email.Contains(email));
|
query = query.Where(u => u.Email != null && u.Email.Contains(email));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(tenantId))
|
if (!string.IsNullOrEmpty(tenantCode))
|
||||||
{
|
{
|
||||||
query = query.Where(u => u.TenantInfo.TenantId.ToString().Contains(tenantId));
|
query = query.Where(u => u.TenantInfo != null &&
|
||||||
|
u.TenantInfo.TenantCode != null &&
|
||||||
|
u.TenantInfo.TenantCode.Contains(tenantCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
var totalCount = await query.CountAsync();
|
var totalCount = await query.CountAsync();
|
||||||
@ -57,15 +63,17 @@ public class UserService(
|
|||||||
foreach (var user in users)
|
foreach (var user in users)
|
||||||
{
|
{
|
||||||
var roles = await userManager.GetRolesAsync(user);
|
var roles = await userManager.GetRolesAsync(user);
|
||||||
var tenant = user.TenantInfo.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null;
|
var tenant = user.TenantInfo?.TenantId > 0
|
||||||
|
? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId)
|
||||||
|
: null;
|
||||||
userDtos.Add(new UserDto
|
userDtos.Add(new UserDto
|
||||||
{
|
{
|
||||||
Id = user.Id,
|
Id = user.Id,
|
||||||
UserName = user.UserName,
|
UserName = user.UserName,
|
||||||
Email = user.Email,
|
Email = user.Email,
|
||||||
RealName = user.RealName,
|
RealName = user.RealName,
|
||||||
Phone = user.Phone,
|
PhoneNumber = user.PhoneNumber,
|
||||||
TenantCode = user.TenantInfo.TenantId.ToString(),
|
TenantCode = user.TenantInfo?.TenantCode,
|
||||||
TenantName = tenant?.Name ?? "",
|
TenantName = tenant?.Name ?? "",
|
||||||
Roles = roles.ToList(),
|
Roles = roles.ToList(),
|
||||||
EmailConfirmed = user.EmailConfirmed,
|
EmailConfirmed = user.EmailConfirmed,
|
||||||
@ -83,15 +91,15 @@ public class UserService(
|
|||||||
if (user == null) return null;
|
if (user == null) return null;
|
||||||
|
|
||||||
var roles = await userManager.GetRolesAsync(user);
|
var roles = await userManager.GetRolesAsync(user);
|
||||||
var tenant = user.TenantInfo.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null;
|
var tenant = user.TenantInfo?.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null;
|
||||||
return new UserDto
|
return new UserDto
|
||||||
{
|
{
|
||||||
Id = user.Id,
|
Id = user.Id,
|
||||||
UserName = user.UserName,
|
UserName = user.UserName,
|
||||||
Email = user.Email,
|
Email = user.Email,
|
||||||
RealName = user.RealName,
|
RealName = user.RealName,
|
||||||
Phone = user.Phone,
|
PhoneNumber = user.PhoneNumber,
|
||||||
TenantCode = user.TenantInfo.TenantId.ToString(),
|
TenantCode = user.TenantInfo?.TenantCode,
|
||||||
TenantName = tenant?.Name ?? "",
|
TenantName = tenant?.Name ?? "",
|
||||||
Roles = roles.ToList(),
|
Roles = roles.ToList(),
|
||||||
EmailConfirmed = user.EmailConfirmed,
|
EmailConfirmed = user.EmailConfirmed,
|
||||||
@ -122,7 +130,7 @@ public class UserService(
|
|||||||
UserName = dto.UserName,
|
UserName = dto.UserName,
|
||||||
Email = dto.Email,
|
Email = dto.Email,
|
||||||
RealName = dto.RealName,
|
RealName = dto.RealName,
|
||||||
Phone = dto.Phone,
|
PhoneNumber = dto.PhoneNumber,
|
||||||
TenantInfo = tenantInfo,
|
TenantInfo = tenantInfo,
|
||||||
EmailConfirmed = dto.EmailConfirmed,
|
EmailConfirmed = dto.EmailConfirmed,
|
||||||
CreatedTime = DateTime.UtcNow
|
CreatedTime = DateTime.UtcNow
|
||||||
@ -134,7 +142,7 @@ public class UserService(
|
|||||||
throw new InvalidOperationException(string.Join(", ", result.Errors.Select(e => e.Description)));
|
throw new InvalidOperationException(string.Join(", ", result.Errors.Select(e => e.Description)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dto.RoleIds != null && dto.RoleIds.Any())
|
if (dto.RoleIds.Count != 0)
|
||||||
{
|
{
|
||||||
foreach (var roleId in dto.RoleIds)
|
foreach (var roleId in dto.RoleIds)
|
||||||
{
|
{
|
||||||
@ -152,7 +160,8 @@ public class UserService(
|
|||||||
await userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue);
|
await userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
await CreateAuditLog("user", "create", "User", user.Id, user.UserName, null, System.Text.Json.JsonSerializer.Serialize(dto));
|
await CreateAuditLog("user", "create", "User", user.Id, user.UserName, null,
|
||||||
|
System.Text.Json.JsonSerializer.Serialize(dto));
|
||||||
|
|
||||||
var roles = await userManager.GetRolesAsync(user);
|
var roles = await userManager.GetRolesAsync(user);
|
||||||
return new UserDto
|
return new UserDto
|
||||||
@ -161,7 +170,7 @@ public class UserService(
|
|||||||
UserName = user.UserName,
|
UserName = user.UserName,
|
||||||
Email = user.Email,
|
Email = user.Email,
|
||||||
RealName = user.RealName,
|
RealName = user.RealName,
|
||||||
Phone = user.Phone,
|
PhoneNumber = user.PhoneNumber,
|
||||||
TenantCode = user.TenantInfo.TenantId.ToString(),
|
TenantCode = user.TenantInfo.TenantId.ToString(),
|
||||||
TenantName = tenant?.Name ?? "",
|
TenantName = tenant?.Name ?? "",
|
||||||
Roles = roles.ToList(),
|
Roles = roles.ToList(),
|
||||||
@ -183,7 +192,7 @@ public class UserService(
|
|||||||
|
|
||||||
user.Email = dto.Email;
|
user.Email = dto.Email;
|
||||||
user.RealName = dto.RealName;
|
user.RealName = dto.RealName;
|
||||||
user.Phone = dto.Phone;
|
user.PhoneNumber = dto.PhoneNumber;
|
||||||
user.EmailConfirmed = dto.EmailConfirmed;
|
user.EmailConfirmed = dto.EmailConfirmed;
|
||||||
user.UpdatedTime = DateTime.UtcNow;
|
user.UpdatedTime = DateTime.UtcNow;
|
||||||
|
|
||||||
@ -200,9 +209,10 @@ public class UserService(
|
|||||||
await userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue);
|
await userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
var tenant = user.TenantInfo.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null;
|
var tenant = user.TenantInfo?.TenantId > 0 ? await tenantManager.FindByIdAsync(user.TenantInfo.TenantId) : null;
|
||||||
|
|
||||||
await CreateAuditLog("user", "update", "User", user.Id, user.UserName, oldValue, System.Text.Json.JsonSerializer.Serialize(user));
|
await CreateAuditLog("user", "update", "User", user.Id, user.UserName, oldValue,
|
||||||
|
System.Text.Json.JsonSerializer.Serialize(user));
|
||||||
|
|
||||||
var roles = await userManager.GetRolesAsync(user);
|
var roles = await userManager.GetRolesAsync(user);
|
||||||
return new UserDto
|
return new UserDto
|
||||||
@ -211,8 +221,8 @@ public class UserService(
|
|||||||
UserName = user.UserName,
|
UserName = user.UserName,
|
||||||
Email = user.Email,
|
Email = user.Email,
|
||||||
RealName = user.RealName,
|
RealName = user.RealName,
|
||||||
Phone = user.Phone,
|
PhoneNumber = user.PhoneNumber,
|
||||||
TenantCode = user.TenantInfo.TenantId.ToString(),
|
TenantCode = user.TenantInfo?.TenantCode,
|
||||||
TenantName = tenant?.Name ?? "",
|
TenantName = tenant?.Name ?? "",
|
||||||
Roles = roles.ToList(),
|
Roles = roles.ToList(),
|
||||||
EmailConfirmed = user.EmailConfirmed,
|
EmailConfirmed = user.EmailConfirmed,
|
||||||
@ -256,10 +266,12 @@ public class UserService(
|
|||||||
await CreateAuditLog("user", "delete", "User", user.Id, user.UserName, oldValue);
|
await CreateAuditLog("user", "delete", "User", user.Id, user.UserName, oldValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task CreateAuditLog(string operation, string action, string targetType, long? targetId, string? targetName, string? oldValue = null, string? newValue = null)
|
private async Task CreateAuditLog(string operation, string action, string targetType, long? targetId,
|
||||||
|
string? targetName, string? oldValue = null, string? newValue = null)
|
||||||
{
|
{
|
||||||
var httpContext = httpContextAccessor.HttpContext;
|
var httpContext = httpContextAccessor.HttpContext;
|
||||||
var userName = httpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier) ?? httpContext?.User?.Identity?.Name ?? "system";
|
var userName = httpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier) ??
|
||||||
|
httpContext?.User?.Identity?.Name ?? "system";
|
||||||
var tenantIdClaim = httpContext?.User?.FindFirstValue("TenantId");
|
var tenantIdClaim = httpContext?.User?.FindFirstValue("TenantId");
|
||||||
|
|
||||||
var log = new AuditLog
|
var log = new AuditLog
|
||||||
@ -281,4 +293,4 @@ public class UserService(
|
|||||||
context.AuditLogs.Add(log);
|
context.AuditLogs.Add(log);
|
||||||
await context.SaveChangesAsync();
|
await context.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user