From 9e53a4a53f7d5dfc6732a97518f8421797503484 Mon Sep 17 00:00:00 2001 From: Eugeny Okhrimenko Date: Tue, 10 Jun 2025 21:29:42 +0200 Subject: [PATCH 1/4] Support triggers --- .../SecurityConfiguraion.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs diff --git a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs new file mode 100644 index 00000000000..85d1759daba --- /dev/null +++ b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using VirtoCommerce.Platform.Core.Security; + +namespace VirtoCommerce.Platform.Data.SqlServer; +public class ApplicationUserConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} From bf01891bfca38ea92ea868877931d36fa4bb01d9 Mon Sep 17 00:00:00 2001 From: Eugeny Okhrimenko Date: Tue, 10 Jun 2025 21:36:28 +0200 Subject: [PATCH 2/4] for tokens --- .../SecurityConfiguraion.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs index 85d1759daba..e62586c557a 100644 --- a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs +++ b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; +using OpenIddict.EntityFrameworkCore.Models; using VirtoCommerce.Platform.Core.Security; namespace VirtoCommerce.Platform.Data.SqlServer; @@ -15,3 +16,11 @@ public void Configure(EntityTypeBuilder builder) builder.ToTable(tb => tb.UseSqlOutputClause(false)); } } + +public class OpenIddictTokenConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} From 470bcd2200ae287a8439016e3011cda56eb1de9f Mon Sep 17 00:00:00 2001 From: Eugeny Okhrimenko Date: Thu, 12 Jun 2025 18:51:15 +0200 Subject: [PATCH 3/4] Add assembly to security db context --- .../SecurityConfiguraion.cs | 1 + .../Repositories/SecurityDbContext.cs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs index e62586c557a..8ca923733ef 100644 --- a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs +++ b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs @@ -7,6 +7,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using OpenIddict.EntityFrameworkCore.Models; using VirtoCommerce.Platform.Core.Security; +using VirtoCommerce.Platform.Data.Model; namespace VirtoCommerce.Platform.Data.SqlServer; public class ApplicationUserConfiguration : IEntityTypeConfiguration diff --git a/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs b/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs index 36f8e1e04ac..f27afca191e 100644 --- a/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs +++ b/src/VirtoCommerce.Platform.Security/Repositories/SecurityDbContext.cs @@ -1,4 +1,6 @@ using System; +using System.Reflection; +using System.Reflection.Emit; using System.Threading; using System.Threading.Tasks; using EntityFrameworkCore.Triggers; @@ -90,6 +92,20 @@ protected override void OnModelCreating(ModelBuilder builder) builder.Entity().ToEntityTable(nameof(ServerCertificate)); builder.Entity().Property(x => x.PrivateKeyCertPassword).HasMaxLength(Length128); + // Allows configuration for an entity type for different database types. + // Applies configuration from all + switch (Database.ProviderName) + { + case "Pomelo.EntityFrameworkCore.MySql": + builder.ApplyConfigurationsFromAssembly(Assembly.Load("VirtoCommerce.Platform.Data.MySql")); + break; + case "Npgsql.EntityFrameworkCore.PostgreSQL": + builder.ApplyConfigurationsFromAssembly(Assembly.Load("VirtoCommerce.Platform.Data.PostgreSql")); + break; + case "Microsoft.EntityFrameworkCore.SqlServer": + builder.ApplyConfigurationsFromAssembly(Assembly.Load("VirtoCommerce.Platform.Data.SqlServer")); + break; + } } #region override Save*** methods to catch save events in Triggers, otherwise ApplicationUser not be catched because SecurityDbContext can't inherit DbContextWithTriggers From c27de63f0d200d0745f504a6664d0b2271967ffb Mon Sep 17 00:00:00 2001 From: Eugeny Okhrimenko Date: Fri, 13 Jun 2025 13:13:47 +0200 Subject: [PATCH 4/4] add more configurations --- .../SecurityConfiguraion.cs | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs index 8ca923733ef..bf8b7215a00 100644 --- a/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs +++ b/src/VirtoCommerce.Platform.Data.SqlServer/SecurityConfiguraion.cs @@ -3,11 +3,13 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using OpenIddict.EntityFrameworkCore.Models; using VirtoCommerce.Platform.Core.Security; using VirtoCommerce.Platform.Data.Model; +using VirtoCommerce.Platform.Security.Model; namespace VirtoCommerce.Platform.Data.SqlServer; public class ApplicationUserConfiguration : IEntityTypeConfiguration @@ -18,6 +20,76 @@ public void Configure(EntityTypeBuilder builder) } } +public class UserApiKeyEntityConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class RoleConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class UserPasswordHistoryEntityConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class ServerCertificateEntityConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class IdentityRoleClaimConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} +public class IdentityUserClaimConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class IdentityUserLoginConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class IdentityUserTokenConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} +public class IdentityUserRoleConfiguration : IEntityTypeConfiguration> +{ + public void Configure(EntityTypeBuilder> builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + public class OpenIddictTokenConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) @@ -25,3 +97,27 @@ public void Configure(EntityTypeBuilder buil builder.ToTable(tb => tb.UseSqlOutputClause(false)); } } + +public class OpenIddictApplicationConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class OpenIddictScopeConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +} + +public class OpenIddictAuthorizationConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(tb => tb.UseSqlOutputClause(false)); + } +}