Add `IdentitySession` entity.

pull/18242/head
maliming 2 years ago
parent 8448b81df2
commit e56d49ed37
No known key found for this signature in database
GPG Key ID: A646B9CB645ECEA4

@ -0,0 +1,10 @@
namespace Volo.Abp.Identity;
public class IdentitySessionConsts
{
public static int MaxDeviceLength { get; set; } = 128;
public static int MaxClientIdLength { get; set; } = 64;
public static int MaxIpAddressesLength { get; set; } = 256;
}

@ -0,0 +1,9 @@
using System;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity;
public interface IIdentitySessionRepository : IBasicRepository<IdentitySession, Guid>
{
}

@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity;
public class IdentitySession : BasicAggregateRoot<Guid>
{
/// <summary>
/// Web, CLI, STUDIO, ...
/// </summary>
public virtual string Device { get; protected set; }
public virtual Guid? TenantId { get; protected set; }
public virtual Guid UserId { get; protected set; }
public virtual string ClientId { get; set; }
public virtual string IpAddresses { get; protected set; }
public virtual DateTime SignedIn { get; protected set; }
public virtual DateTime? LastAccessed { get; protected set; }
protected IdentitySession()
{
}
public IdentitySession(
Guid id,
string device,
Guid userId,
Guid? tenantId,
string clientId,
string ipAddresses,
DateTime signedIn,
DateTime? lastAccessed)
{
Id = id;
Device = device;
UserId = userId;
TenantId = tenantId;
ClientId = clientId;
IpAddresses = ipAddresses;
SignedIn = signedIn;
LastAccessed = lastAccessed;
}
public void SetSignedInTime(DateTime signedIn)
{
SignedIn = signedIn;
}
public void UpdateLastAccessedTime(DateTime? lastAccessed)
{
LastAccessed = lastAccessed;
}
public void SetIpAddresses(IEnumerable<string> ipAddresses)
{
IpAddresses = JoinAsString(ipAddresses);
}
public IEnumerable<string> GetIpAddresses()
{
return GetArrayFromString(IpAddresses);
}
private static string JoinAsString(IEnumerable<string> list)
{
var serialized = string.Join(",", list);
return serialized.IsNullOrWhiteSpace() ? null : serialized;
}
private string[] GetArrayFromString(string str)
{
return str?.Split(",", StringSplitOptions.RemoveEmptyEntries) ?? Array.Empty<string>();
}
}

@ -20,6 +20,7 @@ public class AbpIdentityEntityFrameworkCoreModule : AbpModule
options.AddRepository<IdentitySecurityLog, EFCoreIdentitySecurityLogRepository>();
options.AddRepository<IdentityLinkUser, EfCoreIdentityLinkUserRepository>();
options.AddRepository<IdentityUserDelegation, EfCoreIdentityUserDelegationRepository>();
options.AddRepository<IdentitySession, EfCoreIdentitySessionRepository>();
});
}
}

@ -0,0 +1,15 @@
using System;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.Identity.EntityFrameworkCore;
public class EfCoreIdentitySessionRepository : EfCoreRepository<IIdentityDbContext, IdentitySession, Guid>, IIdentitySessionRepository
{
public EfCoreIdentitySessionRepository(IDbContextProvider<IIdentityDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
}

@ -20,4 +20,6 @@ public interface IIdentityDbContext : IEfCoreDbContext
DbSet<IdentityLinkUser> LinkUsers { get; }
DbSet<IdentityUserDelegation> UserDelegations { get; }
DbSet<IdentitySession> Sessions { get; }
}

@ -24,6 +24,8 @@ public class IdentityDbContext : AbpDbContext<IdentityDbContext>, IIdentityDbCon
public DbSet<IdentityUserDelegation> UserDelegations { get; set; }
public DbSet<IdentitySession> Sessions { get; set; }
public IdentityDbContext(DbContextOptions<IdentityDbContext> options)
: base(options)
{

@ -279,6 +279,22 @@ public static class IdentityDbContextModelBuilderExtensions
b.ApplyObjectExtensionMappings();
});
builder.Entity<IdentitySession>(b =>
{
b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Sessions", AbpIdentityDbProperties.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.Device).HasMaxLength(IdentitySessionConsts.MaxDeviceLength).IsRequired();
b.Property(x => x.ClientId).HasMaxLength(IdentitySessionConsts.MaxClientIdLength);
b.Property(x => x.IpAddresses).HasMaxLength(IdentitySessionConsts.MaxIpAddressesLength);
b.HasIndex(x => new { x.Device });
b.HasIndex(x => new { x.TenantId, x.UserId });
b.ApplyObjectExtensionMappings();
});
builder.TryConfigureObjectExtensions<IdentityDbContext>();
}
}

@ -21,6 +21,8 @@ public class AbpIdentityMongoDbContext : AbpMongoDbContext, IAbpIdentityMongoDbC
public IMongoCollection<IdentityUserDelegation> UserDelegations => Collection<IdentityUserDelegation>();
public IMongoCollection<IdentitySession> Sessions => Collection<IdentitySession>();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
base.CreateModel(modelBuilder);

@ -42,5 +42,10 @@ public static class AbpIdentityMongoDbContextExtensions
{
b.CollectionName = AbpIdentityDbProperties.DbTablePrefix + "UserDelegations";
});
builder.Entity<IdentitySession>(b =>
{
b.CollectionName = AbpIdentityDbProperties.DbTablePrefix + "Sessions";
});
}
}

@ -21,6 +21,7 @@ public class AbpIdentityMongoDbModule : AbpModule
options.AddRepository<IdentitySecurityLog, MongoIdentitySecurityLogRepository>();
options.AddRepository<IdentityLinkUser, MongoIdentityLinkUserRepository>();
options.AddRepository<IdentityUserDelegation, MongoIdentityUserDelegationRepository>();
options.AddRepository<IdentitySession, MongoIdentitySessionRepository>();
});
}
}

@ -20,4 +20,6 @@ public interface IAbpIdentityMongoDbContext : IAbpMongoDbContext
IMongoCollection<IdentityLinkUser> LinkUsers { get; }
IMongoCollection<IdentityUserDelegation> UserDelegations { get; }
IMongoCollection<IdentitySession> Sessions { get; }
}

@ -0,0 +1,14 @@
using System;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
namespace Volo.Abp.Identity.MongoDB;
public class MongoIdentitySessionRepository : MongoDbRepository<IAbpIdentityMongoDbContext, IdentitySession, Guid>, IIdentitySessionRepository
{
public MongoIdentitySessionRepository(IMongoDbContextProvider<IAbpIdentityMongoDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
}
Loading…
Cancel
Save