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
}