using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using CellularManagement.Domain.Entities; using CellularManagement.Domain.Repositories; using CellularManagement.Infrastructure.Repositories.Base; using CellularManagement.Domain.Repositories.Base; using CellularManagement.Domain.Repositories.Identity; namespace CellularManagement.Infrastructure.Repositories.Identity; /// /// 用户角色仓储实现类 /// public class UserRoleRepository : BaseRepository, IUserRoleRepository { private readonly ILogger _logger; /// /// 初始化仓储 /// public UserRoleRepository( ICommandRepository commandRepository, IQueryRepository queryRepository, ILogger logger) : base(commandRepository, queryRepository, logger) { _logger = logger; } #region IUserRoleCommandRepository 实现 /// /// 添加用户角色关系 /// public async Task AddUserRoleAsync(UserRole userRole, CancellationToken cancellationToken = default) { return await CommandRepository.AddAsync(userRole, cancellationToken); } /// /// 删除用户角色关系 /// public async Task DeleteUserRoleAsync(string userId, string roleId, CancellationToken cancellationToken = default) { var userRole = await QueryRepository.FirstOrDefaultAsync( ur => ur.UserId == userId && ur.RoleId == roleId, cancellationToken); if (userRole != null) { CommandRepository.Delete(userRole); } } /// /// 批量添加用户角色关系 /// public async Task AddUserRolesAsync(IEnumerable userRoles, CancellationToken cancellationToken = default) { await CommandRepository.AddRangeAsync(userRoles, cancellationToken); } /// /// 批量删除用户角色关系 /// public async Task DeleteUserRolesAsync(string userId, IEnumerable roleIds, CancellationToken cancellationToken = default) { var userRoles = await QueryRepository.FindAsync( ur => ur.UserId == userId && roleIds.Contains(ur.RoleId), cancellationToken); if (userRoles.Any()) { CommandRepository.DeleteRange(userRoles); } } #endregion #region IUserRoleQueryRepository 实现 /// /// 获取用户的所有角色 /// public async Task> GetUserRolesAsync(string userId, CancellationToken cancellationToken = default) { var userRoles = await QueryRepository.FindAsync( ur => ur.UserId == userId, cancellationToken); return userRoles.Select(ur => ur.RoleId).ToList(); } /// /// 获取角色的所有用户 /// public async Task> GetRoleUsersAsync(string roleId, CancellationToken cancellationToken = default) { var userRoles = await QueryRepository.FindAsync( ur => ur.RoleId == roleId, cancellationToken); return userRoles.Select(ur => ur.UserId).ToList(); } /// /// 检查用户是否拥有指定角色 /// public async Task HasRoleAsync(string userId, string roleId, CancellationToken cancellationToken = default) { return await QueryRepository.AnyAsync( ur => ur.UserId == userId && ur.RoleId == roleId, cancellationToken); } /// /// 获取用户角色关系 /// public async Task GetUserRoleAsync(string userId, string roleId, CancellationToken cancellationToken = default) { return await QueryRepository.FirstOrDefaultAsync( ur => ur.UserId == userId && ur.RoleId == roleId, cancellationToken); } #endregion }