Browse Source

添加用户角色相关功能

refactor/repository-structure
hyh 8 months ago
parent
commit
554ca522f6
  1. 8
      src/CellularManagement.Application/Features/Auth/Commands/AuthenticateUser/AuthenticateUserCommandHandler.cs
  2. 19
      src/CellularManagement.Application/Features/Auth/Commands/RegisterUser/RegisterUserCommandHandler.cs
  3. 25
      src/CellularManagement.Domain/Repositories/IUserRoleRepository.cs
  4. 67
      src/CellularManagement.Infrastructure/Repositories/UserRoleRepository.cs

8
src/CellularManagement.Application/Features/Auth/Commands/AuthenticateUser/AuthenticateUserCommandHandler.cs

@ -6,6 +6,7 @@ using CellularManagement.Application.Common;
using CellularManagement.Application.Services;
using CellularManagement.Domain.Entities;
using CellularManagement.Application.Features.Auth.Common;
using CellularManagement.Domain.Repositories;
namespace CellularManagement.Application.Features.Auth.Commands.AuthenticateUser;
@ -17,6 +18,7 @@ public sealed class AuthenticateUserCommandHandler : IRequestHandler<Authenticat
private readonly UserManager<AppUser> _userManager;
private readonly IJwtProvider _jwtProvider;
private readonly ILogger<AuthenticateUserCommandHandler> _logger;
private readonly IUserRoleRepository _userRoleRepository;
/// <summary>
/// 初始化处理器
@ -24,11 +26,13 @@ public sealed class AuthenticateUserCommandHandler : IRequestHandler<Authenticat
public AuthenticateUserCommandHandler(
UserManager<AppUser> userManager,
IJwtProvider jwtProvider,
ILogger<AuthenticateUserCommandHandler> logger)
ILogger<AuthenticateUserCommandHandler> logger,
IUserRoleRepository userRoleRepository)
{
_userManager = userManager;
_jwtProvider = jwtProvider;
_logger = logger;
_userRoleRepository = userRoleRepository;
}
/// <summary>
@ -68,7 +72,7 @@ public sealed class AuthenticateUserCommandHandler : IRequestHandler<Authenticat
}
// 获取用户角色
var roles = await _userManager.GetRolesAsync(user);
var roles = await _userRoleRepository.GetUserRolesAsync(user.Id, cancellationToken);
// 创建用户声明
var claims = new List<Claim>

19
src/CellularManagement.Application/Features/Auth/Commands/RegisterUser/RegisterUserCommandHandler.cs

@ -2,7 +2,7 @@ using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Logging;
using MediatR;
using CellularManagement.Domain.Entities;
using CellularManagement.Domain.Repositories;
namespace CellularManagement.Application.Features.Auth.Commands.RegisterUser;
@ -13,16 +13,19 @@ public sealed class RegisterUserCommandHandler : IRequestHandler<RegisterUserCom
{
private readonly UserManager<AppUser> _userManager;
private readonly ILogger<RegisterUserCommandHandler> _logger;
private readonly IUserRoleRepository _userRoleRepository;
/// <summary>
/// 初始化处理器
/// </summary>
public RegisterUserCommandHandler(
UserManager<AppUser> userManager,
ILogger<RegisterUserCommandHandler> logger)
ILogger<RegisterUserCommandHandler> logger,
IUserRoleRepository userRoleRepository)
{
_userManager = userManager;
_logger = logger;
_userRoleRepository = userRoleRepository;
}
/// <summary>
@ -67,8 +70,16 @@ public sealed class RegisterUserCommandHandler : IRequestHandler<RegisterUserCom
return OperationResult<RegisterUserResponse>.CreateFailure(errors);
}
// 添加默认角色
await _userManager.AddToRoleAsync(user, "User");
// 创建用户角色关系
var userRole = new UserRole
{
UserId = user.Id,
RoleId = "2", // User 角色的 ID
User = user
};
// 添加用户角色关系
await _userRoleRepository.AddAsync(userRole, cancellationToken);
_logger.LogInformation("用户 {UserName} 注册成功", request.UserName);

25
src/CellularManagement.Domain/Repositories/IUserRoleRepository.cs

@ -0,0 +1,25 @@
using CellularManagement.Domain.Entities;
namespace CellularManagement.Domain.Repositories;
/// <summary>
/// 用户角色仓储接口
/// </summary>
public interface IUserRoleRepository
{
/// <summary>
/// 添加用户角色关系
/// </summary>
/// <param name="userRole">用户角色关系实体</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>添加的用户角色关系实体</returns>
Task<UserRole> AddAsync(UserRole userRole, CancellationToken cancellationToken = default);
/// <summary>
/// 获取用户角色
/// </summary>
/// <param name="userId">用户ID</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>用户角色列表</returns>
Task<IList<string>> GetUserRolesAsync(string userId, CancellationToken cancellationToken = default);
}

67
src/CellularManagement.Infrastructure/Repositories/UserRoleRepository.cs

@ -0,0 +1,67 @@
using Microsoft.EntityFrameworkCore;
using CellularManagement.Domain.Entities;
using CellularManagement.Domain.Repositories;
using CellularManagement.Infrastructure.Context;
using Microsoft.Extensions.Logging;
namespace CellularManagement.Infrastructure.Repositories;
/// <summary>
/// 用户角色仓储实现类
/// </summary>
public class UserRoleRepository : IUserRoleRepository
{
private readonly AppDbContext _context;
private readonly IUnitOfWork _unitOfWork;
private readonly ILogger<UserRoleRepository> _logger;
/// <summary>
/// 初始化仓储
/// </summary>
/// <param name="context">数据库上下文</param>
/// <param name="unitOfWork">工作单元</param>
/// <param name="logger">日志记录器</param>
public UserRoleRepository(
AppDbContext context,
IUnitOfWork unitOfWork,
ILogger<UserRoleRepository> logger)
{
_context = context;
_unitOfWork = unitOfWork;
_logger = logger;
}
/// <inheritdoc />
public async Task<UserRole> AddAsync(UserRole userRole, CancellationToken cancellationToken = default)
{
try
{
await _context.UserRoles.AddAsync(userRole, cancellationToken);
await _unitOfWork.SaveChangesAsync(cancellationToken);
return userRole;
}
catch (Exception ex)
{
_logger.LogError(ex, "添加用户角色关系时发生错误,用户ID:{UserId},角色ID:{RoleId}",
userRole.UserId, userRole.RoleId);
throw;
}
}
/// <inheritdoc />
public async Task<IList<string>> GetUserRolesAsync(string userId, CancellationToken cancellationToken = default)
{
try
{
return await _context.UserRoles
.Where(ur => ur.UserId == userId)
.Select(ur => ur.Role.Name)
.ToListAsync(cancellationToken);
}
catch (Exception ex)
{
_logger.LogError(ex, "获取用户角色时发生错误,用户ID:{UserId}", userId);
throw;
}
}
}
Loading…
Cancel
Save