diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs index 164d9a1c32..9729d03129 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs @@ -102,4 +102,11 @@ public interface IIdentityUserRepository : IBasicRepository bool? notActive = null, CancellationToken cancellationToken = default ); + + Task FindByTenantIdAndUserNameAsync( + [NotNull] string userName, + Guid? tenantId, + bool includeDetails = true, + CancellationToken cancellationToken = default + ); } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs index 0b8efc4af5..ab9cc892d6 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs @@ -5,6 +5,7 @@ using System.Linq.Dynamic.Core; using System.Security.Claims; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -301,4 +302,18 @@ public class EfCoreIdentityUserRepository : EfCoreRepository FindByTenantIdAndUserNameAsync( + [NotNull] string userName, + Guid? tenantId, + bool includeDetails = true, + CancellationToken cancellationToken = default) + { + return await(await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .FirstOrDefaultAsync( + u => u.TenantId == tenantId && u.UserName == userName, + GetCancellationToken(cancellationToken) + ); + } } diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs index 2edcff0388..71d0d2eb53 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs @@ -5,6 +5,7 @@ using System.Linq.Dynamic.Core; using System.Security.Claims; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; @@ -269,4 +270,17 @@ public class MongoIdentityUserRepository : MongoDbRepository u.OrganizationUnits.Any(uou => organizationUnitIds.Contains(uou.OrganizationUnitId))) .ToListAsync(cancellationToken); } + + public virtual async Task FindByTenantIdAndUserNameAsync( + [NotNull] string userName, + Guid? tenantId, + bool includeDetails = true, + CancellationToken cancellationToken = default) + { + return await (await GetMongoQueryableAsync(cancellationToken)) + .FirstOrDefaultAsync( + u => u.TenantId == tenantId && u.UserName == userName, + GetCancellationToken(cancellationToken) + ); + } }