Browse Source

Refactor.

pull/5190/head
maliming 6 years ago
parent
commit
433e21ccfb
  1. 19
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentImpersonatorTenant.cs
  2. 10
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs
  3. 11
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ICurrentImpersonatorTenant.cs
  4. 3
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ICurrentTenant.cs
  5. 32
      framework/src/Volo.Abp.Security/System/Security/Principal/AbpClaimsIdentityExtensions.cs
  6. 8
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs
  7. 24
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/CurrentPrincipalAccessorExtensions.cs
  8. 19
      framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentImpersonatorUser.cs
  9. 4
      framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs
  10. 11
      framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentImpersonatorUser.cs
  11. 5
      framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs
  12. 31
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs
  13. 25
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/CurrentPrincipalAccessorExtensions.cs
  14. 26
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUser.cs
  15. 5
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs
  16. 4
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs
  17. 4
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs
  18. 4
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs

19
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentImpersonatorTenant.cs

@ -1,19 +0,0 @@
using System;
using System.Security.Principal;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.MultiTenancy
{
public class CurrentImpersonatorTenant : ICurrentImpersonatorTenant, ITransientDependency
{
public virtual Guid? Id => _principalAccessor.Principal?.FindImpersonatorTenantId();
private readonly ICurrentPrincipalAccessor _principalAccessor;
public CurrentImpersonatorTenant(ICurrentPrincipalAccessor principalAccessor)
{
_principalAccessor = principalAccessor;
}
}
}

10
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs

@ -1,5 +1,7 @@
using System; using System;
using System.Security.Principal;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.MultiTenancy namespace Volo.Abp.MultiTenancy
{ {
@ -9,13 +11,17 @@ namespace Volo.Abp.MultiTenancy
public virtual Guid? Id => _currentTenantAccessor.Current?.TenantId; public virtual Guid? Id => _currentTenantAccessor.Current?.TenantId;
public virtual Guid? ImpersonatorId => _principalAccessor.Principal?.FindTenantImpersonatorId();
public string Name => _currentTenantAccessor.Current?.Name; public string Name => _currentTenantAccessor.Current?.Name;
private readonly ICurrentTenantAccessor _currentTenantAccessor; private readonly ICurrentTenantAccessor _currentTenantAccessor;
private readonly ICurrentPrincipalAccessor _principalAccessor;
public CurrentTenant(ICurrentTenantAccessor currentTenantAccessor) public CurrentTenant(ICurrentTenantAccessor currentTenantAccessor, ICurrentPrincipalAccessor principalAccessor)
{ {
_currentTenantAccessor = currentTenantAccessor; _currentTenantAccessor = currentTenantAccessor;
_principalAccessor = principalAccessor;
} }
public IDisposable Change(Guid? id, string name = null) public IDisposable Change(Guid? id, string name = null)

11
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ICurrentImpersonatorTenant.cs

@ -1,11 +0,0 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy
{
public interface ICurrentImpersonatorTenant
{
[CanBeNull]
Guid? Id { get; }
}
}

3
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ICurrentTenant.cs

@ -10,6 +10,9 @@ namespace Volo.Abp.MultiTenancy
[CanBeNull] [CanBeNull]
Guid? Id { get; } Guid? Id { get; }
[CanBeNull]
Guid? ImpersonatorId { get; }
[CanBeNull] [CanBeNull]
string Name { get; } string Name { get; }

32
framework/src/Volo.Abp.Security/System/Security/Principal/AbpClaimsIdentityExtensions.cs

@ -39,35 +39,35 @@ namespace System.Security.Principal
return Guid.Parse(userIdOrNull.Value); return Guid.Parse(userIdOrNull.Value);
} }
public static Guid? FindImpersonatorUserId([NotNull] this ClaimsPrincipal principal) public static Guid? FindUserImpersonatorId([NotNull] this ClaimsPrincipal principal)
{ {
Check.NotNull(principal, nameof(principal)); Check.NotNull(principal, nameof(principal));
var impersonatorUserIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId); var userImpersonatorIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.UserImpersonatorId);
if (impersonatorUserIdOrNull == null || impersonatorUserIdOrNull.Value.IsNullOrWhiteSpace()) if (userImpersonatorIdOrNull == null || userImpersonatorIdOrNull.Value.IsNullOrWhiteSpace())
{ {
return null; return null;
} }
if (Guid.TryParse(impersonatorUserIdOrNull.Value, out Guid result)) if (Guid.TryParse(userImpersonatorIdOrNull.Value, out Guid result))
{ {
return result; return result;
} }
return null; return null;
} }
public static Guid? FindImpersonatorUserId([NotNull] this IIdentity identity) public static Guid? FindUserImpersonatorId([NotNull] this IIdentity identity)
{ {
Check.NotNull(identity, nameof(identity)); Check.NotNull(identity, nameof(identity));
var claimsIdentity = identity as ClaimsIdentity; var claimsIdentity = identity as ClaimsIdentity;
var impersonatorUserIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId); var userImpersonatorIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.UserImpersonatorId);
if (impersonatorUserIdOrNull == null || impersonatorUserIdOrNull.Value.IsNullOrWhiteSpace()) if (userImpersonatorIdOrNull == null || userImpersonatorIdOrNull.Value.IsNullOrWhiteSpace())
{ {
return null; return null;
} }
return Guid.Parse(impersonatorUserIdOrNull.Value); return Guid.Parse(userImpersonatorIdOrNull.Value);
} }
public static Guid? FindTenantId([NotNull] this ClaimsPrincipal principal) public static Guid? FindTenantId([NotNull] this ClaimsPrincipal principal)
@ -98,32 +98,32 @@ namespace System.Security.Principal
return Guid.Parse(tenantIdOrNull.Value); return Guid.Parse(tenantIdOrNull.Value);
} }
public static Guid? FindImpersonatorTenantId([NotNull] this ClaimsPrincipal principal) public static Guid? FindTenantImpersonatorId([NotNull] this ClaimsPrincipal principal)
{ {
Check.NotNull(principal, nameof(principal)); Check.NotNull(principal, nameof(principal));
var impersonatorTenantIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId); var tenantImpersonatorIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.TenantImpersonatorId);
if (impersonatorTenantIdOrNull == null || impersonatorTenantIdOrNull.Value.IsNullOrWhiteSpace()) if (tenantImpersonatorIdOrNull == null || tenantImpersonatorIdOrNull.Value.IsNullOrWhiteSpace())
{ {
return null; return null;
} }
return Guid.Parse(impersonatorTenantIdOrNull.Value); return Guid.Parse(tenantImpersonatorIdOrNull.Value);
} }
public static Guid? FindImpersonatorTenantId([NotNull] this IIdentity identity) public static Guid? FindTenantImpersonatorId([NotNull] this IIdentity identity)
{ {
Check.NotNull(identity, nameof(identity)); Check.NotNull(identity, nameof(identity));
var claimsIdentity = identity as ClaimsIdentity; var claimsIdentity = identity as ClaimsIdentity;
var impersonatorTenantIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId); var tenantImpersonatorIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.TenantImpersonatorId);
if (impersonatorTenantIdOrNull == null || impersonatorTenantIdOrNull.Value.IsNullOrWhiteSpace()) if (tenantImpersonatorIdOrNull == null || tenantImpersonatorIdOrNull.Value.IsNullOrWhiteSpace())
{ {
return null; return null;
} }
return Guid.Parse(impersonatorTenantIdOrNull.Value); return Guid.Parse(tenantImpersonatorIdOrNull.Value);
} }
public static string FindClientId([NotNull] this ClaimsPrincipal principal) public static string FindClientId([NotNull] this ClaimsPrincipal principal)

8
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs

@ -19,9 +19,9 @@ namespace Volo.Abp.Security.Claims
public static string UserId { get; set; } = ClaimTypes.NameIdentifier; public static string UserId { get; set; } = ClaimTypes.NameIdentifier;
/// <summary> /// <summary>
/// Default: "impersonator_userid". /// Default: "user_impersonator_id".
/// </summary> /// </summary>
public static string ImpersonatorUserId { get; set; } = "impersonator_userid"; public static string UserImpersonatorId { get; set; } = "user_impersonator_id";
/// <summary> /// <summary>
/// Default: <see cref="ClaimTypes.Role"/> /// Default: <see cref="ClaimTypes.Role"/>
@ -54,9 +54,9 @@ namespace Volo.Abp.Security.Claims
public static string TenantId { get; set; } = "tenantid"; public static string TenantId { get; set; } = "tenantid";
/// <summary> /// <summary>
/// Default: "impersonator_tenantid". /// Default: "tenant_impersonator_id".
/// </summary> /// </summary>
public static string ImpersonatorTenantId { get; set; } = "impersonator_tenantid"; public static string TenantImpersonatorId { get; set; } = "tenant_impersonator_id";
/// <summary> /// <summary>
/// Default: "editionid". /// Default: "editionid".

24
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/CurrentPrincipalAccessorExtensions.cs

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Security.Claims;
namespace Volo.Abp.Security.Claims
{
public static class CurrentPrincipalAccessorExtensions
{
public static IDisposable Change(this ICurrentPrincipalAccessor currentPrincipalAccessor, Claim claim)
{
return currentPrincipalAccessor.Change(new[] {claim});
}
public static IDisposable Change(this ICurrentPrincipalAccessor currentPrincipalAccessor, IEnumerable<Claim> claims)
{
return currentPrincipalAccessor.Change(new ClaimsIdentity(claims));
}
public static IDisposable Change(this ICurrentPrincipalAccessor currentPrincipalAccessor, ClaimsIdentity claimsIdentity)
{
return currentPrincipalAccessor.Change(new ClaimsPrincipal(claimsIdentity));
}
}
}

19
framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentImpersonatorUser.cs

@ -1,19 +0,0 @@
using System;
using System.Security.Principal;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.Users
{
public class CurrentImpersonatorUser : ICurrentImpersonatorUser, ITransientDependency
{
public virtual Guid? Id => _principalAccessor.Principal?.FindImpersonatorUserId();
private readonly ICurrentPrincipalAccessor _principalAccessor;
public CurrentImpersonatorUser(ICurrentPrincipalAccessor principalAccessor)
{
_principalAccessor = principalAccessor;
}
}
}

4
framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs

@ -15,6 +15,8 @@ namespace Volo.Abp.Users
public virtual Guid? Id => _principalAccessor.Principal?.FindUserId(); public virtual Guid? Id => _principalAccessor.Principal?.FindUserId();
public virtual Guid? ImpersonatorId => _principalAccessor.Principal?.FindUserImpersonatorId();
public virtual string UserName => this.FindClaimValue(AbpClaimTypes.UserName); public virtual string UserName => this.FindClaimValue(AbpClaimTypes.UserName);
public virtual string PhoneNumber => this.FindClaimValue(AbpClaimTypes.PhoneNumber); public virtual string PhoneNumber => this.FindClaimValue(AbpClaimTypes.PhoneNumber);
@ -56,4 +58,4 @@ namespace Volo.Abp.Users
return FindClaims(AbpClaimTypes.Role).Any(c => c.Value == roleName); return FindClaims(AbpClaimTypes.Role).Any(c => c.Value == roleName);
} }
} }
} }

11
framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentImpersonatorUser.cs

@ -1,11 +0,0 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.Users
{
public interface ICurrentImpersonatorUser
{
[CanBeNull]
Guid? Id { get; }
}
}

5
framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs

@ -11,12 +11,15 @@ namespace Volo.Abp.Users
[CanBeNull] [CanBeNull]
Guid? Id { get; } Guid? Id { get; }
[CanBeNull]
Guid? ImpersonatorId { get; }
[CanBeNull] [CanBeNull]
string UserName { get; } string UserName { get; }
[CanBeNull] [CanBeNull]
string PhoneNumber { get; } string PhoneNumber { get; }
bool PhoneNumberVerified { get; } bool PhoneNumberVerified { get; }
[CanBeNull] [CanBeNull]

31
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs

@ -13,50 +13,45 @@ namespace Volo.Abp.Identity
{ {
public class AbpUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser, IdentityRole>, ITransientDependency public class AbpUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser, IdentityRole>, ITransientDependency
{ {
protected ICurrentImpersonatorUser CurrentImpersonatorUser { get; } protected ICurrentUser CurrentUser { get; }
protected ICurrentImpersonatorTenant CurrentImpersonatorTenant { get; } protected ICurrentTenant CurrentTenant { get; }
public AbpUserClaimsPrincipalFactory( public AbpUserClaimsPrincipalFactory(
UserManager<IdentityUser> userManager, UserManager<IdentityUser> userManager,
RoleManager<IdentityRole> roleManager, RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> options, IOptions<IdentityOptions> options,
ICurrentImpersonatorUser currentImpersonatorUser, ICurrentUser currentUser,
ICurrentImpersonatorTenant currentImpersonatorTenant) ICurrentTenant currentTenant)
: base( : base(
userManager, userManager,
roleManager, roleManager,
options) options)
{ {
CurrentImpersonatorUser = currentImpersonatorUser; CurrentUser = currentUser;
CurrentImpersonatorTenant = currentImpersonatorTenant; CurrentTenant = currentTenant;
} }
[UnitOfWork] [UnitOfWork]
public override async Task<ClaimsPrincipal> CreateAsync(IdentityUser user) public override async Task<ClaimsPrincipal> CreateAsync(IdentityUser user)
{ {
var principal = await base.CreateAsync(user); var principal = await base.CreateAsync(user);
var identity = principal.Identities.First();
if (user.TenantId.HasValue) if (user.TenantId.HasValue)
{ {
principal.Identities identity.AddClaim(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
.First()
.AddClaim(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
} }
if (CurrentImpersonatorUser.Id != user.Id || CurrentImpersonatorTenant.Id != user.TenantId) if (CurrentUser.ImpersonatorId != user.Id || CurrentTenant.ImpersonatorId != user.TenantId)
{ {
if (CurrentImpersonatorUser.Id.HasValue) if (CurrentUser.ImpersonatorId.HasValue)
{ {
principal.Identities identity.AddClaim(new Claim(AbpClaimTypes.UserImpersonatorId, CurrentUser.ImpersonatorId.ToString()));
.First()
.AddClaim(new Claim(AbpClaimTypes.ImpersonatorUserId, CurrentImpersonatorUser.Id.ToString()));
} }
if (CurrentImpersonatorTenant.Id.HasValue) if (CurrentTenant.ImpersonatorId.HasValue)
{ {
principal.Identities identity.AddClaim(new Claim(AbpClaimTypes.TenantImpersonatorId, CurrentTenant.ImpersonatorId.ToString()));
.First()
.AddClaim(new Claim(AbpClaimTypes.ImpersonatorTenantId, CurrentImpersonatorTenant.Id.ToString()));
} }
} }

25
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/CurrentPrincipalAccessorExtensions.cs

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Security.Claims;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.Identity
{
public static class CurrentPrincipalAccessorExtensions
{
public static IDisposable ChangeImpersonatorId(this ICurrentPrincipalAccessor currentPrincipalAccessor, Guid? tenantImpersonatorId, Guid? userImpersonatorId)
{
var impersonatorClaims = new List<Claim>();
if (tenantImpersonatorId.HasValue)
{
impersonatorClaims.Add(new Claim(AbpClaimTypes.TenantImpersonatorId, tenantImpersonatorId.ToString()));
}
if (userImpersonatorId.HasValue)
{
impersonatorClaims.Add(new Claim(AbpClaimTypes.UserImpersonatorId, userImpersonatorId.ToString()));
}
return currentPrincipalAccessor.Change(impersonatorClaims);
}
}
}

26
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUser.cs

@ -3,8 +3,24 @@ using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
public class IdentityLinkUser : AggregateRoot<Guid> public class IdentityLinkUser : BasicAggregateRoot<Guid>
{ {
public virtual Guid SourceUserId { get; protected set; }
public virtual Guid? SourceTenantId { get; protected set; }
public virtual Guid TargetUserId { get; protected set; }
public virtual Guid? TargetTenantId { get; protected set; }
/// <summary>
/// Initializes a new instance of <see cref="IdentityLinkUser"/>.
/// </summary>
protected IdentityLinkUser()
{
}
public IdentityLinkUser(Guid id, IdentityLinkUserInfo sourceUser, IdentityLinkUserInfo targetUser) public IdentityLinkUser(Guid id, IdentityLinkUserInfo sourceUser, IdentityLinkUserInfo targetUser)
: base(id) : base(id)
{ {
@ -24,13 +40,5 @@ namespace Volo.Abp.Identity
TargetUserId = targetUserId; TargetUserId = targetUserId;
TargetTenantId = targetTenantId; TargetTenantId = targetTenantId;
} }
public virtual Guid SourceUserId { get; protected set; }
public virtual Guid? SourceTenantId { get; protected set; }
public virtual Guid TargetUserId { get; protected set; }
public virtual Guid? TargetTenantId { get; protected set; }
} }
} }

5
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs

@ -1,7 +1,6 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.SecurityLog;
namespace Volo.Abp.Identity.EntityFrameworkCore namespace Volo.Abp.Identity.EntityFrameworkCore
{ {
@ -16,8 +15,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
DbSet<OrganizationUnit> OrganizationUnits { get; set; } DbSet<OrganizationUnit> OrganizationUnits { get; set; }
DbSet<IdentitySecurityLog> IdentitySecurityLogs { get; set; } DbSet<IdentitySecurityLog> SecurityLogs { get; set; }
DbSet<IdentityLinkUser> IdentityLinkUsers { get; set; } DbSet<IdentityLinkUser> LinkUsers { get; set; }
} }
} }

4
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs

@ -18,9 +18,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
public DbSet<OrganizationUnit> OrganizationUnits { get; set; } public DbSet<OrganizationUnit> OrganizationUnits { get; set; }
public DbSet<IdentitySecurityLog> IdentitySecurityLogs { get; set; } public DbSet<IdentitySecurityLog> SecurityLogs { get; set; }
public DbSet<IdentityLinkUser> IdentityLinkUsers { get; set; } public DbSet<IdentityLinkUser> LinkUsers { get; set; }
public IdentityDbContext(DbContextOptions<IdentityDbContext> options) public IdentityDbContext(DbContextOptions<IdentityDbContext> options)
: base(options) : base(options)

4
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs

@ -15,9 +15,9 @@ namespace Volo.Abp.Identity.MongoDB
public IMongoCollection<OrganizationUnit> OrganizationUnits => Collection<OrganizationUnit>(); public IMongoCollection<OrganizationUnit> OrganizationUnits => Collection<OrganizationUnit>();
public IMongoCollection<IdentitySecurityLog> IdentitySecurityLogs => Collection<IdentitySecurityLog>(); public IMongoCollection<IdentitySecurityLog> SecurityLogs => Collection<IdentitySecurityLog>();
public IMongoCollection<IdentityLinkUser> IdentityLinkUsers => Collection<IdentityLinkUser>(); public IMongoCollection<IdentityLinkUser> LinkUsers => Collection<IdentityLinkUser>();
protected override void CreateModel(IMongoModelBuilder modelBuilder) protected override void CreateModel(IMongoModelBuilder modelBuilder)
{ {

4
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs

@ -15,8 +15,8 @@ namespace Volo.Abp.Identity.MongoDB
IMongoCollection<OrganizationUnit> OrganizationUnits { get; } IMongoCollection<OrganizationUnit> OrganizationUnits { get; }
IMongoCollection<IdentitySecurityLog> IdentitySecurityLogs { get; } IMongoCollection<IdentitySecurityLog> SecurityLogs { get; }
IMongoCollection<IdentityLinkUser> IdentityLinkUsers { get; } IMongoCollection<IdentityLinkUser> LinkUsers { get; }
} }
} }

Loading…
Cancel
Save