From 948c84227c521025f7739a2d1b73cd5c510c7768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 15:58:52 +0300 Subject: [PATCH 01/15] Added AbpTenantManagementEntityFrameworkCoreModule to the AuthServer.Host & enabled multi-tenancy. --- .../AuthServer.Host/AuthServer.Host.csproj | 1 + .../AuthServer.Host/AuthServerHostModule.cs | 13 +- .../AuthServerDbContext.cs | 2 + ...125631_Added_Tenant_Management.Designer.cs | 1675 +++++++++++++++++ .../20200304125631_Added_Tenant_Management.cs | 65 + .../AuthServerDbContextModelSnapshot.cs | 85 + 6 files changed, 1838 insertions(+), 3 deletions(-) create mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.Designer.cs create mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.cs diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index c828edc0ae..766d8bc2d4 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -33,6 +33,7 @@ + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs index 9c9ccd2a99..55747a5f87 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs @@ -9,7 +9,6 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.Auditing; using Volo.Abp.AuditLogging.EntityFrameworkCore; -using Volo.Abp.Authorization.Permissions; using Volo.Abp.Autofac; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; @@ -20,9 +19,10 @@ using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.IdentityServer.EntityFrameworkCore; using Volo.Abp.Localization; using Volo.Abp.Modularity; -using Volo.Abp.PermissionManagement; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.Threading; namespace AuthServer.Host @@ -39,7 +39,8 @@ namespace AuthServer.Host typeof(AbpIdentityServerEntityFrameworkCoreModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpAccountWebIdentityServerModule), - typeof(AbpAspNetCoreMvcUiBasicThemeModule) + typeof(AbpAspNetCoreMvcUiBasicThemeModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule) )] public class AuthServerHostModule : AbpModule { @@ -52,6 +53,11 @@ namespace AuthServer.Host options.AddDefaultRepositories(); }); + Configure(options => + { + options.IsEnabled = true; + }); + Configure(options => { options.UseSqlServer(); @@ -86,6 +92,7 @@ namespace AuthServer.Host app.UseCorrelationId(); app.UseVirtualFiles(); app.UseRouting(); + app.UseMultiTenancy(); app.UseIdentityServer(); app.UseAbpRequestLocalization(); app.UseAuditing(); diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs index e17372071c..1ad42015ae 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs @@ -5,6 +5,7 @@ using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.IdentityServer.EntityFrameworkCore; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; namespace AuthServer.Host.EntityFrameworkCore { @@ -25,6 +26,7 @@ namespace AuthServer.Host.EntityFrameworkCore modelBuilder.ConfigureAuditLogging(); modelBuilder.ConfigurePermissionManagement(); modelBuilder.ConfigureSettingManagement(); + modelBuilder.ConfigureTenantManagement(); } } } diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.Designer.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.Designer.cs new file mode 100644 index 0000000000..7413c67851 --- /dev/null +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.Designer.cs @@ -0,0 +1,1675 @@ +// +using System; +using AuthServer.Host.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AuthServer.Host.Migrations +{ + [DbContext(typeof(AuthServerDbContext))] + [Migration("20200304125631_Added_Tenant_Management")] + partial class Added_Tenant_Management + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Description") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Regex") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDefault") + .HasColumnName("IsDefault") + .HasColumnType("bit"); + + b.Property("IsPublic") + .HasColumnName("IsPublic") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnName("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(196)") + .HasMaxLength(196); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiResources"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Type"); + + b.ToTable("IdentityServerApiClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("ApiResourceId", "Name"); + + b.ToTable("IdentityServerApiScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Name", "Type"); + + b.ToTable("IdentityServerApiScopeClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ApiResourceId", "Type", "Value"); + + b.ToTable("IdentityServerApiSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bit"); + + b.Property("AllowOfflineAccess") + .HasColumnType("bit"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("bit"); + + b.Property("AllowRememberConsent") + .HasColumnType("bit"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bit"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("bit"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("PairWiseSubjectSalt") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ProtocolType") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RequireClientSecret") + .HasColumnType("bit"); + + b.Property("RequireConsent") + .HasColumnType("bit"); + + b.Property("RequirePkce") + .HasColumnType("bit"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("bit"); + + b.Property("UserCodeType") + .HasColumnType("nvarchar(100)") + .HasMaxLength(100); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("IdentityServerClients"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Origin") + .HasColumnType("nvarchar(150)") + .HasMaxLength(150); + + b.HasKey("ClientId", "Origin"); + + b.ToTable("IdentityServerClientCorsOrigins"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("GrantType") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "GrantType"); + + b.ToTable("IdentityServerClientGrantTypes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Provider"); + + b.ToTable("IdentityServerClientIdPRestrictions"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("PostLogoutRedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "PostLogoutRedirectUri"); + + b.ToTable("IdentityServerClientPostLogoutRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Key") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "Key"); + + b.ToTable("IdentityServerClientProperties"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("RedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "RedirectUri"); + + b.ToTable("IdentityServerClientRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Scope") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Scope"); + + b.ToTable("IdentityServerClientScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => + { + b.Property("Key") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(50)") + .HasMaxLength(50); + + b.HasKey("Key"); + + b.HasIndex("Expiration"); + + b.HasIndex("SubjectId", "ClientId", "Type"); + + b.ToTable("IdentityServerPersistedGrants"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.Property("IdentityResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("IdentityResourceId", "Type"); + + b.ToTable("IdentityServerIdentityClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerIdentityResources"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Scopes") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId", "Name") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Secrets") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Claims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedCorsOrigins") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("PostLogoutRedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("UserClaims") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.cs new file mode 100644 index 0000000000..738849c910 --- /dev/null +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304125631_Added_Tenant_Management.cs @@ -0,0 +1,65 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AuthServer.Host.Migrations +{ + public partial class Added_Tenant_Management : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpTenants", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpTenantConnectionStrings", + columns: table => new + { + TenantId = table.Column(nullable: false), + Name = table.Column(maxLength: 64, nullable: false), + Value = table.Column(maxLength: 1024, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); + table.ForeignKey( + name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", + column: x => x.TenantId, + principalTable: "AbpTenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpTenants_Name", + table: "AbpTenants", + column: "Name"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpTenantConnectionStrings"); + + migrationBuilder.DropTable( + name: "AbpTenants"); + } + } +} diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs index 81f7c5f23b..67a67bc2fb 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs @@ -1379,6 +1379,82 @@ namespace AuthServer.Host.Migrations b.ToTable("AbpSettings"); }); + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => { b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) @@ -1582,6 +1658,15 @@ namespace AuthServer.Host.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); #pragma warning restore 612, 618 } } From 9868dece7e9d68b82d99abec71e2316266b28d98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 17:07:26 +0300 Subject: [PATCH 02/15] Create TenantManagementService.Host application. --- samples/MicroserviceDemo/MicroserviceDemo.sln | 11 +- .../BloggingService.Host/Program.cs | 4 +- .../BloggingService.Host/Startup.cs | 4 +- .../TenantManagementService.Host/Program.cs | 64 ++++++++++ .../Properties/launchSettings.json | 27 ++++ .../TenantManagementService.Host/Startup.cs | 20 +++ .../TenantManagementService.Host.csproj | 43 +++++++ .../TenantManagementServiceHostModule.cs | 118 ++++++++++++++++++ .../appsettings.Development.json | 9 ++ .../appsettings.json | 10 ++ 10 files changed, 303 insertions(+), 7 deletions(-) create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/Startup.cs create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json diff --git a/samples/MicroserviceDemo/MicroserviceDemo.sln b/samples/MicroserviceDemo/MicroserviceDemo.sln index 65c254b4c6..311744e4a9 100644 --- a/samples/MicroserviceDemo/MicroserviceDemo.sln +++ b/samples/MicroserviceDemo/MicroserviceDemo.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.168 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29609.76 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "microservices", "microservices", "{3B26D176-390B-4F51-BE52-E9B422C28A88}" EndProject @@ -61,6 +61,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleClientDemo", "applic EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublicWebSite.Host", "applications\PublicWebSite.Host\PublicWebSite.Host.csproj", "{29A3A4EF-DEC4-4E43-B6B8-D565667F85EC}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TenantManagementService.Host", "microservices\TenantManagementService.Host\TenantManagementService.Host.csproj", "{3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -155,6 +157,10 @@ Global {29A3A4EF-DEC4-4E43-B6B8-D565667F85EC}.Debug|Any CPU.Build.0 = Debug|Any CPU {29A3A4EF-DEC4-4E43-B6B8-D565667F85EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {29A3A4EF-DEC4-4E43-B6B8-D565667F85EC}.Release|Any CPU.Build.0 = Release|Any CPU + {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -185,6 +191,7 @@ Global {2199D857-C926-4948-A7F7-A11E344F90AA} = {8F6834D7-E6FA-4A04-83BB-955F68EA0A0A} {BB8FA269-460D-42BE-90A0-E97D6A3FDEB1} = {8F6834D7-E6FA-4A04-83BB-955F68EA0A0A} {29A3A4EF-DEC4-4E43-B6B8-D565667F85EC} = {8F6834D7-E6FA-4A04-83BB-955F68EA0A0A} + {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61} = {3B26D176-390B-4F51-BE52-E9B422C28A88} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {37474F0D-2E52-4D2F-B39B-7FE3FF31B4EC} diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs b/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs index 4a2f3d30c2..e09fc7b1cc 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs @@ -37,13 +37,13 @@ namespace BloggingService.Host try { - Log.Information("Starting IdentityService.Host."); + Log.Information("Starting BloggingService.Host."); CreateHostBuilder(args).Build().Run(); return 0; } catch (Exception ex) { - Log.Fatal(ex, "IdentityService.Host terminated unexpectedly!"); + Log.Fatal(ex, "BloggingService.Host terminated unexpectedly!"); return 1; } finally diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/Startup.cs b/samples/MicroserviceDemo/microservices/BloggingService.Host/Startup.cs index e3ad346cb7..4d3cc2b90a 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/Startup.cs +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/Startup.cs @@ -1,9 +1,7 @@ -using System; -using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using Volo.Abp; namespace BloggingService.Host { diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs new file mode 100644 index 0000000000..2f0d621979 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs @@ -0,0 +1,64 @@ +using System; +using System.IO; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; +using Serilog.Sinks.Elasticsearch; + +namespace TenantManagementService.Host +{ + public class Program + { + public static int Main(string[] args) + { + //TODO: Temporary: it's not good to read appsettings.json here just to configure logging + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .AddEnvironmentVariables() + .Build(); + + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .Enrich.WithProperty("Application", "TenantManagementService") + .Enrich.FromLogContext() + .WriteTo.File("Logs/logs.txt") + .WriteTo.Elasticsearch( + new ElasticsearchSinkOptions(new Uri(configuration["ElasticSearch:Url"])) + { + AutoRegisterTemplate = true, + AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6, + IndexFormat = "msdemo-log-{0:yyyy.MM}" + }) + .CreateLogger(); + + try + { + Log.Information("Starting TenantManagementService.Host."); + CreateHostBuilder(args).Build().Run(); + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "TenantManagementService.Host terminated unexpectedly!"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + internal static IHostBuilder CreateHostBuilder(string[] args) => + Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .UseAutofac() + .UseSerilog(); + } +} diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json new file mode 100644 index 0000000000..9c88d1143c --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:59835", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "TenantManagementService.Host": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Startup.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Startup.cs new file mode 100644 index 0000000000..da1f2ae6ef --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Startup.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace TenantManagementService.Host +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddApplication(); + } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) + { + app.InitializeApplication(); + } + } +} \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj new file mode 100644 index 0000000000..c900402598 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj @@ -0,0 +1,43 @@ + + + + netcoreapp3.1 + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + true + true + true + true + false + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs new file mode 100644 index 0000000000..946de5b37e --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs @@ -0,0 +1,118 @@ +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.OpenApi.Models; +using StackExchange.Redis; +using Volo.Abp; +using Volo.Abp.Auditing; +using Volo.Abp.AuditLogging.EntityFrameworkCore; +using Volo.Abp.Autofac; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.EventBus.RabbitMq; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.Security.Claims; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement; +using Volo.Abp.TenantManagement.EntityFrameworkCore; + +namespace TenantManagementService.Host +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(AbpEventBusRabbitMqModule), + typeof(AbpEntityFrameworkCoreSqlServerModule), + typeof(AbpAuditLoggingEntityFrameworkCoreModule), + typeof(AbpPermissionManagementEntityFrameworkCoreModule), + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpTenantManagementHttpApiModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule), + typeof(AbpTenantManagementApplicationModule) + )] + public class TenantManagementServiceHostModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + + context.Services.AddAuthentication("Bearer") + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.ApiName = configuration["AuthServer:ApiName"]; + options.RequireHttpsMetadata = false; + }); + + context.Services.AddSwaggerGen(options => + { + options.SwaggerDoc("v1", new OpenApiInfo {Title = "Identity Service API", Version = "v1"}); + options.DocInclusionPredicate((docName, description) => true); + options.CustomSchemaIds(type => type.FullName); + }); + + Configure(options => + { + options.Languages.Add(new LanguageInfo("en", "en", "English")); + }); + + Configure(options => + { + options.UseSqlServer(); + }); + + context.Services.AddStackExchangeRedisCache(options => + { + options.Configuration = configuration["Redis:Configuration"]; + }); + + Configure(options => + { + options.IsEnabledForGetRequests = true; + options.ApplicationName = "IdentityService"; + }); + + var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); + context.Services.AddDataProtection() + .PersistKeysToStackExchangeRedis(redis, "MsDemo-DataProtection-Keys"); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + + app.UseCorrelationId(); + app.UseVirtualFiles(); + app.UseRouting(); + app.UseAuthentication(); + + app.Use(async (ctx, next) => + { + var currentPrincipalAccessor = ctx.RequestServices.GetRequiredService(); + var map = new Dictionary() + { + { "sub", AbpClaimTypes.UserId }, + { "role", AbpClaimTypes.Role }, + { "email", AbpClaimTypes.Email }, + //any other map + }; + var mapClaims = currentPrincipalAccessor.Principal.Claims.Where(p => map.Keys.Contains(p.Type)).ToList(); + currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); + await next(); + }); + + app.UseAbpRequestLocalization(); //TODO: localization? + app.UseSwagger(); + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/swagger/v1/swagger.json", "Identity Service API"); + }); + app.UseAuditing(); + app.UseMvcWithDefaultRouteAndArea(); + } + } +} diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json new file mode 100644 index 0000000000..8983e0fc1c --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json new file mode 100644 index 0000000000..d9d9a9bff6 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} From 2c1aeb21b8d1442a0037814fcb0d53ed7cb87a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 18:02:58 +0300 Subject: [PATCH 03/15] Configured tenant management service --- .../AuthServer.Host/AuthServerDataSeeder.cs | 1 + .../TenantManagementServiceHostModule.cs | 6 ++-- .../appsettings.Development.json | 8 ++--- .../appsettings.json | 30 ++++++++++++++++--- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs index 03850e6d4f..835e55cf49 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs @@ -57,6 +57,7 @@ namespace AuthServer.Host }; await CreateApiResourceAsync("IdentityService", commonApiUserClaims); + await CreateApiResourceAsync("TenantManagementService", commonApiUserClaims); await CreateApiResourceAsync("BloggingService", commonApiUserClaims); await CreateApiResourceAsync("ProductService", commonApiUserClaims); await CreateApiResourceAsync("InternalGateway", commonApiUserClaims); diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs index 946de5b37e..43de1b2a3a 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs @@ -50,7 +50,7 @@ namespace TenantManagementService.Host context.Services.AddSwaggerGen(options => { - options.SwaggerDoc("v1", new OpenApiInfo {Title = "Identity Service API", Version = "v1"}); + options.SwaggerDoc("v1", new OpenApiInfo {Title = "Tenant Management Service API", Version = "v1"}); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); }); @@ -73,7 +73,7 @@ namespace TenantManagementService.Host Configure(options => { options.IsEnabledForGetRequests = true; - options.ApplicationName = "IdentityService"; + options.ApplicationName = "TenantManagementService"; }); var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); @@ -109,7 +109,7 @@ namespace TenantManagementService.Host app.UseSwagger(); app.UseSwaggerUI(options => { - options.SwaggerEndpoint("/swagger/v1/swagger.json", "Identity Service API"); + options.SwaggerEndpoint("/swagger/v1/swagger.json", "Tenant Management Service API"); }); app.UseAuditing(); app.UseMvcWithDefaultRouteAndArea(); diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json index 8983e0fc1c..f999bc20e7 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.Development.json @@ -1,9 +1,9 @@ { "Logging": { "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" } } -} +} \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json index d9d9a9bff6..3a0c8e3c57 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/appsettings.json @@ -1,10 +1,32 @@ { + "AuthServer": { + "Authority": "http://localhost:64999", + "ApiName": "TenantManagementService" + }, + "ConnectionStrings": { + "Default": "Server=localhost;Database=MsDemo_Identity;Trusted_Connection=True;MultipleActiveResultSets=true" + }, + "ElasticSearch": { + "Url": "http://localhost:9200" + }, + "Redis": { + "Configuration": "127.0.0.1" + }, + "RabbitMQ": { + "Connections": { + "Default": { + "HostName": "localhost" + } + }, + "EventBus": { + "ClientName": "MsDemo_TenantManagementService", + "ExchangeName": "MsDemo" + } + }, "Logging": { "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" + "Default": "Warning" } }, "AllowedHosts": "*" -} +} \ No newline at end of file From 00396bc7ec7f0ea0e982bb611635c8806558954d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 18:04:42 +0300 Subject: [PATCH 04/15] Added HomeController to redirect to the swagger UI --- .gitignore | 1 + .../Controllers/HomeController.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 samples/MicroserviceDemo/microservices/TenantManagementService.Host/Controllers/HomeController.cs diff --git a/.gitignore b/.gitignore index 6f7330998e..eb4dbedfae 100644 --- a/.gitignore +++ b/.gitignore @@ -292,3 +292,4 @@ samples/MicroserviceDemo/microservices/BloggingService.Host/Logs/logs.txt samples/MicroserviceDemo/applications/ConsoleClientDemo/Logs/logs.txt modules/docs/app/Volo.DocsTestApp/Logs/logs.txt framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Logs/logs.txt +samples/MicroserviceDemo/microservices/TenantManagementService.Host/Logs/logs.txt diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Controllers/HomeController.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Controllers/HomeController.cs new file mode 100644 index 0000000000..690dfb972e --- /dev/null +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Controllers/HomeController.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; + +namespace IdentityService.Host.Controllers +{ + public class HomeController : AbpController + { + public ActionResult Index() + { + return Redirect("/swagger"); + } + } +} From ca246162efed31c5df93f931c1030873aebe8a1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 18:29:18 +0300 Subject: [PATCH 05/15] Authorize clients for tenant management service, configure gateways and make the console client demo working. --- .../AuthServer.Host/AuthServer.Host.csproj | 1 + .../AuthServer.Host/AuthServerDataSeeder.cs | 7 ++-- .../AuthServer.Host/AuthServerHostModule.cs | 6 ++-- .../ConsoleClientDemo/ClientDemoService.cs | 36 ++++++++++++++++++- .../ConsoleClientDemo.csproj | 1 + .../ConsoleClientDemoModule.cs | 4 ++- .../ConsoleClientDemo/appsettings.json | 2 +- .../appsettings.json | 12 +++++++ .../InternalGateway.Host.csproj | 1 + .../InternalGatewayHostModule.cs | 4 ++- .../InternalGateway.Host/appsettings.json | 12 +++++++ .../Properties/launchSettings.json | 2 +- 12 files changed, 78 insertions(+), 10 deletions(-) diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 766d8bc2d4..8ff54297fd 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -33,6 +33,7 @@ + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs index 835e55cf49..7b07a0eb8c 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerDataSeeder.cs @@ -10,6 +10,7 @@ using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.PermissionManagement; +using Volo.Abp.TenantManagement; using Volo.Abp.Uow; namespace AuthServer.Host @@ -107,15 +108,15 @@ namespace AuthServer.Host await CreateClientAsync( "console-client-demo", - new[] { "BloggingService", "IdentityService", "InternalGateway", "ProductService" }, + new[] { "BloggingService", "IdentityService", "InternalGateway", "ProductService", "TenantManagementService" }, new[] { "client_credentials", "password" }, commonSecret, - permissions: new[] { IdentityPermissions.Users.Default, "ProductManagement.Product" } + permissions: new[] { IdentityPermissions.Users.Default, TenantManagementPermissions.Tenants.Default, "ProductManagement.Product" } ); await CreateClientAsync( "backend-admin-app-client", - commonScopes.Union(new[] { "BackendAdminAppGateway", "IdentityService", "ProductService" }), + commonScopes.Union(new[] { "BackendAdminAppGateway", "IdentityService", "ProductService", "TenantManagementService" }), new[] { "hybrid" }, commonSecret, permissions: new[] { IdentityPermissions.Users.Default, "ProductManagement.Product" }, diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs index 55747a5f87..6b4bec75af 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs @@ -22,6 +22,7 @@ using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.Threading; @@ -40,8 +41,9 @@ namespace AuthServer.Host typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpAccountWebIdentityServerModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(AbpTenantManagementEntityFrameworkCoreModule) - )] + typeof(AbpTenantManagementEntityFrameworkCoreModule), + typeof(AbpTenantManagementApplicationContractsModule) + )] public class AuthServerHostModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ClientDemoService.cs b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ClientDemoService.cs index 6083368d3e..e13bccd88d 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ClientDemoService.cs +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ClientDemoService.cs @@ -7,12 +7,14 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client; using Volo.Abp.Identity; using Volo.Abp.IdentityModel; +using Volo.Abp.TenantManagement; namespace ConsoleClientDemo { public class ClientDemoService : ITransientDependency { private readonly IIdentityUserAppService _userAppService; + private readonly ITenantAppService _tenantAppService; private readonly IProductAppService _productAppService; private readonly IIdentityModelAuthenticationService _authenticator; private readonly AbpRemoteServiceOptions _remoteServiceOptions; @@ -21,10 +23,12 @@ namespace ConsoleClientDemo IIdentityUserAppService userAppService, IProductAppService productAppService, IIdentityModelAuthenticationService authenticator, - IOptions remoteServiceOptions) + IOptions remoteServiceOptions, + ITenantAppService tenantAppService) { _userAppService = userAppService; _authenticator = authenticator; + _tenantAppService = tenantAppService; _remoteServiceOptions = remoteServiceOptions.Value; _productAppService = productAppService; } @@ -33,6 +37,7 @@ namespace ConsoleClientDemo { await TestWithHttpClient(); await TestIdentityService(); + await TestTenantManagementService(); await TestProductService(); } @@ -101,6 +106,35 @@ namespace ConsoleClientDemo } } + /// + /// Shows how to use application service interfaces (ITenantAppService in this sample) + /// to call a remote service which is possible by the dynamic http client proxy system. + /// No need to use IIdentityModelAuthenticationService since the dynamic http client proxy + /// system internally uses it. You just inject a service (ITenantAppService) + /// and call a method (GetListAsync) like a local method. + /// + private async Task TestTenantManagementService() + { + Console.WriteLine(); + Console.WriteLine("*** TestTenantManagementService ************************************"); + + try + { + var output = await _tenantAppService.GetListAsync(new GetTenantsInput()); + + Console.WriteLine("Total tenant count: " + output.TotalCount); + + foreach (var tenant in output.Items) + { + Console.WriteLine($"- Id={tenant.Id}, Name={tenant.Name}"); + } + } + catch (Exception e) + { + Console.WriteLine(e); + } + } + /// /// Shows how to use application service interfaces (IProductAppService in this sample) /// to call a remote service which is possible by the dynamic http client proxy system. diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj index 2443f75e5d..9e75f902e8 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj @@ -14,6 +14,7 @@ + diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoModule.cs b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoModule.cs index c69902ee19..86ef487e53 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoModule.cs +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.Autofac; using Volo.Abp.Http.Client.IdentityModel; using Volo.Abp.Identity; using Volo.Abp.Modularity; +using Volo.Abp.TenantManagement; namespace ConsoleClientDemo { @@ -10,7 +11,8 @@ namespace ConsoleClientDemo typeof(AbpAutofacModule), typeof(AbpHttpClientIdentityModelModule), typeof(AbpIdentityHttpApiClientModule), - typeof(ProductManagementHttpApiClientModule) + typeof(ProductManagementHttpApiClientModule), + typeof(AbpTenantManagementHttpApiClientModule) )] public class ConsoleClientDemoModule : AbpModule { diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/appsettings.json b/samples/MicroserviceDemo/applications/ConsoleClientDemo/appsettings.json index 336020aec8..58043efa85 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/appsettings.json +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/appsettings.json @@ -10,7 +10,7 @@ "ClientId": "console-client-demo", "ClientSecret": "1q2w3e*", "Authority": "http://localhost:64999", - "Scope": "InternalGateway IdentityService ProductService" + "Scope": "InternalGateway IdentityService ProductService TenantManagementService" } } } \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/appsettings.json b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/appsettings.json index 3e6f45b15a..d29e87a577 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/appsettings.json +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/appsettings.json @@ -30,6 +30,18 @@ "UpstreamPathTemplate": "/api/identity/{everything}", "UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] }, + { + "DownstreamPathTemplate": "/api/multi-tenancy/{everything}", + "DownstreamScheme": "http", + "DownstreamHostAndPorts": [ + { + "Host": "localhost", + "Port": 59835 + } + ], + "UpstreamPathTemplate": "/api/multi-tenancy/{everything}", + "UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] + }, { "DownstreamPathTemplate": "/api/productManagement/{everything}", "DownstreamScheme": "http", diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index c46183b709..5c2506f6c2 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -26,6 +26,7 @@ + diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs index a3572551f9..01be78ca65 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs @@ -19,6 +19,7 @@ using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement; using Volo.Blogging; namespace InternalGateway.Host @@ -30,7 +31,8 @@ namespace InternalGateway.Host typeof(ProductManagementHttpApiModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), - typeof(AbpSettingManagementEntityFrameworkCoreModule) + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpTenantManagementHttpApiModule) )] public class InternalGatewayHostModule : AbpModule { diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/appsettings.json b/samples/MicroserviceDemo/gateways/InternalGateway.Host/appsettings.json index c3863ac907..44ca565d47 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/appsettings.json +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/appsettings.json @@ -25,6 +25,18 @@ "UpstreamPathTemplate": "/api/identity/{everything}", "UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] }, + { + "DownstreamPathTemplate": "/api/multi-tenancy/{everything}", + "DownstreamScheme": "http", + "DownstreamHostAndPorts": [ + { + "Host": "localhost", + "Port": 59835 + } + ], + "UpstreamPathTemplate": "/api/multi-tenancy/{everything}", + "UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] + }, { "DownstreamPathTemplate": "/api/productManagement/{everything}", "DownstreamScheme": "http", diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json index 9c88d1143c..f763b95884 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Properties/launchSettings.json @@ -18,7 +18,7 @@ "TenantManagementService.Host": { "commandName": "Project", "launchBrowser": true, - "applicationUrl": "http://localhost:5000", + "applicationUrl": "http://localhost:59835", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } From 4c83db008fabcc8ceceecafe955ad69fbfb283a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 18:53:57 +0300 Subject: [PATCH 06/15] Added feature management and tenant management UI to the backend app. --- .../AuthServer.Host/AuthServer.Host.csproj | 3 +- .../AuthServerDbContext.cs | 2 + ...55131_Added_Feature_Management.Designer.cs | 1706 +++++++++++++++++ ...20200304155131_Added_Feature_Management.cs | 37 + .../AuthServerDbContextModelSnapshot.cs | 31 + .../BackendAdminApp.Host.csproj | 3 + .../BackendAdminAppHostModule.cs | 11 +- .../BackendAdminAppGateway.Host.csproj | 8 +- .../BackendAdminAppGatewayHostModule.cs | 13 +- 9 files changed, 1808 insertions(+), 6 deletions(-) create mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.Designer.cs create mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.cs diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 8ff54297fd..73b1f68b7c 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1 @@ -32,6 +32,7 @@ + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs index 1ad42015ae..49c4f705c0 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/EntityFrameworkCore/AuthServerDbContext.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.IdentityServer.EntityFrameworkCore; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -27,6 +28,7 @@ namespace AuthServer.Host.EntityFrameworkCore modelBuilder.ConfigurePermissionManagement(); modelBuilder.ConfigureSettingManagement(); modelBuilder.ConfigureTenantManagement(); + modelBuilder.ConfigureFeatureManagement(); } } } diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.Designer.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.Designer.cs new file mode 100644 index 0000000000..8299b070e1 --- /dev/null +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.Designer.cs @@ -0,0 +1,1706 @@ +// +using System; +using AuthServer.Host.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AuthServer.Host.Migrations +{ + [DbContext(typeof(AuthServerDbContext))] + [Migration("20200304155131_Added_Feature_Management")] + partial class Added_Feature_Management + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Description") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Regex") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDefault") + .HasColumnName("IsDefault") + .HasColumnType("bit"); + + b.Property("IsPublic") + .HasColumnName("IsPublic") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnName("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(196)") + .HasMaxLength(196); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiResources"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Type"); + + b.ToTable("IdentityServerApiClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("ApiResourceId", "Name"); + + b.ToTable("IdentityServerApiScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Name", "Type"); + + b.ToTable("IdentityServerApiScopeClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ApiResourceId", "Type", "Value"); + + b.ToTable("IdentityServerApiSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bit"); + + b.Property("AllowOfflineAccess") + .HasColumnType("bit"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("bit"); + + b.Property("AllowRememberConsent") + .HasColumnType("bit"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bit"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("bit"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("PairWiseSubjectSalt") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ProtocolType") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RequireClientSecret") + .HasColumnType("bit"); + + b.Property("RequireConsent") + .HasColumnType("bit"); + + b.Property("RequirePkce") + .HasColumnType("bit"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("bit"); + + b.Property("UserCodeType") + .HasColumnType("nvarchar(100)") + .HasMaxLength(100); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("IdentityServerClients"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Origin") + .HasColumnType("nvarchar(150)") + .HasMaxLength(150); + + b.HasKey("ClientId", "Origin"); + + b.ToTable("IdentityServerClientCorsOrigins"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("GrantType") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "GrantType"); + + b.ToTable("IdentityServerClientGrantTypes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Provider"); + + b.ToTable("IdentityServerClientIdPRestrictions"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("PostLogoutRedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "PostLogoutRedirectUri"); + + b.ToTable("IdentityServerClientPostLogoutRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Key") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "Key"); + + b.ToTable("IdentityServerClientProperties"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("RedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "RedirectUri"); + + b.ToTable("IdentityServerClientRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Scope") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Scope"); + + b.ToTable("IdentityServerClientScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => + { + b.Property("Key") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(50)") + .HasMaxLength(50); + + b.HasKey("Key"); + + b.HasIndex("Expiration"); + + b.HasIndex("SubjectId", "ClientId", "Type"); + + b.ToTable("IdentityServerPersistedGrants"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.Property("IdentityResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("IdentityResourceId", "Type"); + + b.ToTable("IdentityServerIdentityClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerIdentityResources"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Scopes") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId", "Name") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Secrets") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Claims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedCorsOrigins") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("PostLogoutRedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("UserClaims") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.cs new file mode 100644 index 0000000000..49b117536e --- /dev/null +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200304155131_Added_Feature_Management.cs @@ -0,0 +1,37 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AuthServer.Host.Migrations +{ + public partial class Added_Feature_Management : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpFeatureValues", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + Value = table.Column(maxLength: 128, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: true), + ProviderKey = table.Column(maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpFeatureValues", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpFeatureValues_Name_ProviderName_ProviderKey", + table: "AbpFeatureValues", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpFeatureValues"); + } + } +} diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs index 67a67bc2fb..e7f114e76a 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs @@ -266,6 +266,37 @@ namespace AuthServer.Host.Migrations b.ToTable("AbpEntityPropertyChanges"); }); + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index cc23b9f584..d4f6a9f604 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -30,6 +30,9 @@ + + + diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs index 395b40aeb0..4aa5f9470a 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs @@ -13,12 +13,15 @@ using Volo.Abp.AspNetCore.Authentication.OAuth; using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.Autofac; +using Volo.Abp.FeatureManagement; using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Identity; using Volo.Abp.Identity.Web; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement; +using Volo.Abp.TenantManagement; +using Volo.Abp.TenantManagement.Web; using Volo.Blogging; namespace BackendAdminApp.Host @@ -30,13 +33,16 @@ namespace BackendAdminApp.Host typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpIdentityHttpApiClientModule), typeof(AbpIdentityWebModule), + typeof(AbpTenantManagementHttpApiClientModule), + typeof(AbpTenantManagementWebModule), typeof(BloggingApplicationContractsModule), typeof(AbpPermissionManagementHttpApiClientModule), typeof(ProductManagementHttpApiClientModule), typeof(ProductManagementWebModule), - typeof(AbpAspNetCoreMvcUiBasicThemeModule) + typeof(AbpAspNetCoreMvcUiBasicThemeModule), + typeof(AbpFeatureManagementHttpApiClientModule) )] - public class BackendAdminAppHostModule : AbpModule + public class BackendAdminAppHostModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { @@ -71,6 +77,7 @@ namespace BackendAdminApp.Host options.Scope.Add("BackendAdminAppGateway"); options.Scope.Add("IdentityService"); options.Scope.Add("ProductService"); + options.Scope.Add("TenantManagementService"); options.ClaimActions.MapAbpClaimTypes(); }); diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 4e2bbba6a6..28cae5c2d3 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1 @@ -33,8 +33,14 @@ + + + + + + diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs index 7004215dcf..d79e085521 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs @@ -14,6 +14,8 @@ using Volo.Abp; using Volo.Abp.Autofac; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.FeatureManagement; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Identity; using Volo.Abp.Modularity; @@ -24,6 +26,7 @@ using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.PermissionManagement.IdentityServer; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement; using Volo.Blogging; namespace BackendAdminAppGateway.Host @@ -41,8 +44,14 @@ namespace BackendAdminAppGateway.Host typeof(BloggingApplicationContractsModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpPermissionManagementDomainIdentityServerModule), - typeof(AbpHttpClientIdentityModelWebModule) - )] + typeof(AbpHttpClientIdentityModelWebModule), + typeof(AbpTenantManagementApplicationContractsModule), + typeof(AbpTenantManagementHttpApiModule), + typeof(AbpTenantManagementHttpApiClientModule), + typeof(AbpFeatureManagementEntityFrameworkCoreModule), + typeof(AbpFeatureManagementApplicationModule), + typeof(AbpFeatureManagementHttpApiModule) + )] public class BackendAdminAppGatewayHostModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) From 1c07d20c9758ceb3ae2834c1bd27462253048d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 19:10:52 +0300 Subject: [PATCH 07/15] Add multi-tenancy packages and enabled multi-tenancy for all applications. --- samples/MicroserviceDemo/MicroserviceDemo.sln | 9 +++++++++ .../AuthServer.Host/AuthServer.Host.csproj | 1 + .../AuthServer.Host/AuthServerHostModule.cs | 8 ++++++-- .../BackendAdminApp.Host.csproj | 1 + .../BackendAdminAppHostModule.cs | 11 +++++++++++ .../PublicWebSite.Host/PublicWebSite.Host.csproj | 1 + .../PublicWebSiteHostModule.cs | 12 ++++++++++++ .../BackendAdminAppGateway.Host.csproj | 2 ++ .../BackendAdminAppGatewayHostModule.cs | 16 ++++++++++++++-- .../InternalGateway.Host.csproj | 4 +++- .../InternalGatewayHostModule.cs | 16 ++++++++++++++-- .../PublicWebSiteGateway.Host.csproj | 2 ++ .../PublicWebSiteGatewayHostModule.cs | 16 ++++++++++++++-- .../BloggingService.Host.csproj | 2 ++ .../BloggingServiceHostModule.cs | 16 ++++++++++++++-- .../IdentityService.Host.csproj | 2 ++ .../IdentityServiceHostModule.cs | 16 ++++++++++++++-- .../ProductService.Host.csproj | 2 ++ .../ProductServiceHostModule.cs | 16 ++++++++++++++-- .../TenantManagementService.Host.csproj | 4 +++- .../TenantManagementServiceHostModule.cs | 16 ++++++++++++++-- .../shared/MsDemo.Shared/MsDemo.Shared.csproj | 7 +++++++ .../shared/MsDemo.Shared/MsDemoConsts.cs | 7 +++++++ 23 files changed, 169 insertions(+), 18 deletions(-) create mode 100644 samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemo.Shared.csproj create mode 100644 samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemoConsts.cs diff --git a/samples/MicroserviceDemo/MicroserviceDemo.sln b/samples/MicroserviceDemo/MicroserviceDemo.sln index 311744e4a9..25b547f648 100644 --- a/samples/MicroserviceDemo/MicroserviceDemo.sln +++ b/samples/MicroserviceDemo/MicroserviceDemo.sln @@ -63,6 +63,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublicWebSite.Host", "appli EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TenantManagementService.Host", "microservices\TenantManagementService.Host\TenantManagementService.Host.csproj", "{3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{2B3B460C-0293-44A1-BEF4-91A778CE73CE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MsDemo.Shared", "shared\MsDemo.Shared\MsDemo.Shared.csproj", "{D4549E30-18CC-4157-B994-C0097216C2C8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -161,6 +165,10 @@ Global {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}.Debug|Any CPU.Build.0 = Debug|Any CPU {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61}.Release|Any CPU.Build.0 = Release|Any CPU + {D4549E30-18CC-4157-B994-C0097216C2C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4549E30-18CC-4157-B994-C0097216C2C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4549E30-18CC-4157-B994-C0097216C2C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4549E30-18CC-4157-B994-C0097216C2C8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -192,6 +200,7 @@ Global {BB8FA269-460D-42BE-90A0-E97D6A3FDEB1} = {8F6834D7-E6FA-4A04-83BB-955F68EA0A0A} {29A3A4EF-DEC4-4E43-B6B8-D565667F85EC} = {8F6834D7-E6FA-4A04-83BB-955F68EA0A0A} {3E1DDEDA-A897-470F-81C2-5A3AFA6D0B61} = {3B26D176-390B-4F51-BE52-E9B422C28A88} + {D4549E30-18CC-4157-B994-C0097216C2C8} = {2B3B460C-0293-44A1-BEF4-91A778CE73CE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {37474F0D-2E52-4D2F-B39B-7FE3FF31B4EC} diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 73b1f68b7c..eaded7f020 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -36,6 +36,7 @@ + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs index 6b4bec75af..8a132b2cac 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs @@ -2,6 +2,7 @@ using AuthServer.Host.EntityFrameworkCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; +using MsDemo.Shared; using StackExchange.Redis; using Volo.Abp; using Volo.Abp.Account; @@ -57,7 +58,7 @@ namespace AuthServer.Host Configure(options => { - options.IsEnabled = true; + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; }); Configure(options => @@ -94,7 +95,10 @@ namespace AuthServer.Host app.UseCorrelationId(); app.UseVirtualFiles(); app.UseRouting(); - app.UseMultiTenancy(); + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseIdentityServer(); app.UseAbpRequestLocalization(); app.UseAuditing(); diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index d4f6a9f604..1e1f6b8c90 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -36,6 +36,7 @@ + diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs index 4aa5f9470a..5e710fbc48 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs @@ -7,6 +7,7 @@ using Microsoft.IdentityModel.Protocols.OpenIdConnect; using ProductManagement; using StackExchange.Redis; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; using Volo.Abp.AspNetCore.Authentication.OAuth; @@ -19,6 +20,7 @@ using Volo.Abp.Identity; using Volo.Abp.Identity.Web; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.Web; @@ -53,6 +55,11 @@ namespace BackendAdminApp.Host options.Languages.Add(new LanguageInfo("en", "en", "English")); }); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication(options => { options.DefaultScheme = "Cookies"; @@ -106,6 +113,10 @@ namespace BackendAdminApp.Host app.UseVirtualFiles(); app.UseRouting(); app.UseAuthentication(); + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseAuthorization(); app.UseAbpRequestLocalization(); app.UseSwagger(); diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj index 24b6082352..685038d9c8 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj @@ -29,6 +29,7 @@ + diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs index 4948995e35..a7e236e2d2 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Protocols.OpenIdConnect; +using MsDemo.Shared; using ProductManagement; using StackExchange.Redis; using Volo.Abp; @@ -14,6 +15,7 @@ using Volo.Abp.Autofac; using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.UI.Navigation; using Volo.Blogging; @@ -40,6 +42,11 @@ namespace PublicWebSite.Host options.Languages.Add(new LanguageInfo("en", "en", "English")); }); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + Configure(options => { options.MenuContributors.Add(new PublicWebSiteMenuContributor()); @@ -90,6 +97,11 @@ namespace PublicWebSite.Host app.UseVirtualFiles(); app.UseRouting(); app.UseAuthentication(); + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } + app.UseAuthorization(); app.UseAbpRequestLocalization(); app.UseMvcWithDefaultRouteAndArea(); } diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 28cae5c2d3..7757bb5cc6 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -24,6 +24,7 @@ + @@ -42,6 +43,7 @@ + diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs index d79e085521..bfbfe7f94a 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs @@ -9,8 +9,10 @@ using Ocelot.Middleware; using ProductManagement; using StackExchange.Redis; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Autofac; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; @@ -19,6 +21,7 @@ using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Identity; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.PermissionManagement.HttpApi; @@ -50,7 +53,8 @@ namespace BackendAdminAppGateway.Host typeof(AbpTenantManagementHttpApiClientModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementApplicationModule), - typeof(AbpFeatureManagementHttpApiModule) + typeof(AbpFeatureManagementHttpApiModule), + typeof(AbpAspNetCoreMultiTenancyModule) )] public class BackendAdminAppGatewayHostModule : AbpModule { @@ -58,6 +62,11 @@ namespace BackendAdminAppGateway.Host { var configuration = context.Services.GetConfiguration(); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { @@ -113,7 +122,10 @@ namespace BackendAdminAppGateway.Host currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); await next(); }); - + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseSwagger(); app.UseSwaggerUI(options => { diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index 5c2506f6c2..c393685128 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1 @@ -24,6 +24,7 @@ + @@ -31,6 +32,7 @@ + diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs index 01be78ca65..fd72854c6b 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGatewayHostModule.cs @@ -9,13 +9,16 @@ using Ocelot.Middleware; using ProductManagement; using StackExchange.Redis; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Autofac; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.Identity; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; @@ -32,7 +35,8 @@ namespace InternalGateway.Host typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), - typeof(AbpTenantManagementHttpApiModule) + typeof(AbpTenantManagementHttpApiModule), + typeof(AbpAspNetCoreMultiTenancyModule) )] public class InternalGatewayHostModule : AbpModule { @@ -40,6 +44,11 @@ namespace InternalGateway.Host { var configuration = context.Services.GetConfiguration(); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { @@ -95,7 +104,10 @@ namespace InternalGateway.Host currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); await next(); }); - + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseSwagger(); app.UseSwaggerUI(options => { diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj index 82f3b5440b..fb06bcea05 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj @@ -24,11 +24,13 @@ + + diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGatewayHostModule.cs b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGatewayHostModule.cs index 0129663e5a..85abd1211c 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGatewayHostModule.cs +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGatewayHostModule.cs @@ -9,12 +9,15 @@ using Ocelot.Middleware; using ProductManagement; using StackExchange.Redis; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Autofac; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; @@ -28,7 +31,8 @@ namespace PublicWebSiteGateway.Host typeof(ProductManagementHttpApiModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), - typeof(AbpSettingManagementEntityFrameworkCoreModule) + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpAspNetCoreMultiTenancyModule) )] public class PublicWebSiteGatewayHostModule : AbpModule { @@ -36,6 +40,11 @@ namespace PublicWebSiteGateway.Host { var configuration = context.Services.GetConfiguration(); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { @@ -91,7 +100,10 @@ namespace PublicWebSiteGateway.Host currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); await next(); }); - + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseSwagger(); app.UseSwaggerUI(options => { diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index 024d64a5e4..1a107bcf40 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -23,6 +23,7 @@ + @@ -34,6 +35,7 @@ + diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs index b72a4f56a6..3b10225ef9 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs @@ -9,8 +9,10 @@ using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Auditing; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; @@ -23,6 +25,7 @@ using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Identity; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; @@ -45,7 +48,8 @@ namespace BloggingService.Host typeof(BloggingMongoDbModule), typeof(BloggingApplicationModule), typeof(AbpHttpClientIdentityModelWebModule), - typeof(AbpIdentityHttpApiClientModule) + typeof(AbpIdentityHttpApiClientModule), + typeof(AbpAspNetCoreMultiTenancyModule) )] public class BloggingServiceHostModule : AbpModule { @@ -54,6 +58,11 @@ namespace BloggingService.Host var configuration = context.Services.GetConfiguration(); var hostingEnvironment = context.Services.GetHostingEnvironment(); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { @@ -123,7 +132,10 @@ namespace BloggingService.Host currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); await next(); }); - + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseAbpRequestLocalization(); //TODO: localization? app.UseSwagger(); app.UseSwaggerUI(options => diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index 11f7485be2..9bab4d252f 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -23,6 +23,7 @@ + @@ -31,6 +32,7 @@ + diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs index 2bf102a465..a9648a6748 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs @@ -6,8 +6,10 @@ using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Auditing; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; @@ -18,6 +20,7 @@ using Volo.Abp.Identity; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; @@ -33,7 +36,8 @@ namespace IdentityService.Host typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), - typeof(AbpIdentityApplicationModule) + typeof(AbpIdentityApplicationModule), + typeof(AbpAspNetCoreMultiTenancyModule) )] public class IdentityServiceHostModule : AbpModule { @@ -41,6 +45,11 @@ namespace IdentityService.Host { var configuration = context.Services.GetConfiguration(); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { @@ -90,7 +99,10 @@ namespace IdentityService.Host app.UseVirtualFiles(); app.UseRouting(); app.UseAuthentication(); - + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.Use(async (ctx, next) => { var currentPrincipalAccessor = ctx.RequestServices.GetRequiredService(); diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index 133a7f70b6..21750c55de 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -24,6 +24,7 @@ + @@ -32,6 +33,7 @@ + diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs index 97235133f9..92993809b4 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs @@ -8,8 +8,10 @@ using ProductManagement; using ProductManagement.EntityFrameworkCore; using StackExchange.Redis; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Auditing; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; @@ -19,6 +21,7 @@ using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.EventBus.RabbitMq; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; @@ -35,7 +38,8 @@ namespace ProductService.Host typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(ProductManagementApplicationModule), typeof(ProductManagementHttpApiModule), - typeof(ProductManagementEntityFrameworkCoreModule) + typeof(ProductManagementEntityFrameworkCoreModule), + typeof(AbpAspNetCoreMultiTenancyModule) )] public class ProductServiceHostModule : AbpModule { @@ -43,6 +47,11 @@ namespace ProductService.Host { var configuration = context.Services.GetConfiguration(); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { @@ -107,7 +116,10 @@ namespace ProductService.Host currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); await next(); }); - + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseAbpRequestLocalization(); //TODO: localization? app.UseSwagger(); app.UseSwaggerUI(options => diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj index c900402598..078c067cf1 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1 @@ -23,6 +23,7 @@ + @@ -31,6 +32,7 @@ + diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs index 43de1b2a3a..9128fdd720 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs @@ -5,8 +5,10 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi.Models; +using MsDemo.Shared; using StackExchange.Redis; using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Auditing; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; @@ -15,6 +17,7 @@ using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.EventBus.RabbitMq; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; @@ -32,7 +35,8 @@ namespace TenantManagementService.Host typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), - typeof(AbpTenantManagementApplicationModule) + typeof(AbpTenantManagementApplicationModule), + typeof(AbpAspNetCoreMultiTenancyModule) )] public class TenantManagementServiceHostModule : AbpModule { @@ -40,6 +44,11 @@ namespace TenantManagementService.Host { var configuration = context.Services.GetConfiguration(); + Configure(options => + { + options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; + }); + context.Services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { @@ -104,7 +113,10 @@ namespace TenantManagementService.Host currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); await next(); }); - + if (MsDemoConsts.IsMultiTenancyEnabled) + { + app.UseMultiTenancy(); + } app.UseAbpRequestLocalization(); //TODO: localization? app.UseSwagger(); app.UseSwaggerUI(options => diff --git a/samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemo.Shared.csproj b/samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemo.Shared.csproj new file mode 100644 index 0000000000..cb63190696 --- /dev/null +++ b/samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemo.Shared.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp3.1 + + + diff --git a/samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemoConsts.cs b/samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemoConsts.cs new file mode 100644 index 0000000000..4b9c7406ce --- /dev/null +++ b/samples/MicroserviceDemo/shared/MsDemo.Shared/MsDemoConsts.cs @@ -0,0 +1,7 @@ +namespace MsDemo.Shared +{ + public class MsDemoConsts + { + public const bool IsMultiTenancyEnabled = true; + } +} From dbdea9773827e831a5774a896b22aa550cca271f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 20:17:38 +0300 Subject: [PATCH 08/15] Add Logout to backend app. --- .../BackendAdminApp.Host.csproj | 2 +- .../BackendAdminAppHostModule.cs | 6 +++ .../BackendAdminAppMenuContributor.cs | 43 +++++++++++++++++++ .../Controllers/AccountController.cs | 9 ++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppMenuContributor.cs create mode 100644 samples/MicroserviceDemo/applications/BackendAdminApp.Host/Controllers/AccountController.cs diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index 1e1f6b8c90..4b24e5d584 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs index 5e710fbc48..d6c076cea3 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppHostModule.cs @@ -24,6 +24,7 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.Web; +using Volo.Abp.UI.Navigation; using Volo.Blogging; namespace BackendAdminApp.Host @@ -60,6 +61,11 @@ namespace BackendAdminApp.Host options.IsEnabled = MsDemoConsts.IsMultiTenancyEnabled; }); + Configure(options => + { + options.MenuContributors.Add(new BackendAdminAppMenuContributor(configuration)); + }); + context.Services.AddAuthentication(options => { options.DefaultScheme = "Cookies"; diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppMenuContributor.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppMenuContributor.cs new file mode 100644 index 0000000000..52aba79169 --- /dev/null +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminAppMenuContributor.cs @@ -0,0 +1,43 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.UI.Navigation; +using Volo.Abp.Users; + +namespace BackendAdminApp.Host +{ + public class BackendAdminAppMenuContributor : IMenuContributor + { + private readonly IConfiguration _configuration; + + public BackendAdminAppMenuContributor(IConfiguration configuration) + { + _configuration = configuration; + } + + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.User) + { + await ConfigureUserMenuAsync(context); + } + } + + private Task ConfigureUserMenuAsync(MenuConfigurationContext context) + { + var currentUser = context.ServiceProvider.GetRequiredService(); + + var identityServerUrl = _configuration["AuthServer:Authority"] ?? ""; + + if (currentUser.IsAuthenticated) + { + //TODO: Localize menu items + context.Menu.AddItem(new ApplicationMenuItem("Account.Manage", "Manage Your Profile", $"{identityServerUrl.EnsureEndsWith('/')}Account/Manage", icon: "fa fa-cog", order: 1000, null, "_blank")); + context.Menu.AddItem(new ApplicationMenuItem("Account.Logout", "Logout", url: "/Account/Logout", icon: "fa fa-power-off", order: int.MaxValue - 1000)); + } + + return Task.CompletedTask; + } + } +} diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/Controllers/AccountController.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/Controllers/AccountController.cs new file mode 100644 index 0000000000..18efdd96b7 --- /dev/null +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/Controllers/AccountController.cs @@ -0,0 +1,9 @@ +using Volo.Abp.AspNetCore.Mvc.Authentication; + +namespace BackendAdminApp.Host.Controllers +{ + public class AccountController : ChallengeAccountController + { + + } +} \ No newline at end of file From 19c90d2c30e84edf53824c0088f0e0553dc6f65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 20:17:55 +0300 Subject: [PATCH 09/15] Depend on AbpIdentityEntityFrameworkCoreModule from the TenantManagementServiceHostModule --- .../TenantManagementService.Host.csproj | 1 + .../TenantManagementServiceHostModule.cs | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj index 078c067cf1..653eee189b 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementService.Host.csproj @@ -29,6 +29,7 @@ + diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs index 9128fdd720..b60daf710e 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/TenantManagementServiceHostModule.cs @@ -15,6 +15,7 @@ using Volo.Abp.Autofac; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.EventBus.RabbitMq; +using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; @@ -36,7 +37,12 @@ namespace TenantManagementService.Host typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpTenantManagementApplicationModule), - typeof(AbpAspNetCoreMultiTenancyModule) + typeof(AbpAspNetCoreMultiTenancyModule), + + /* TODO: Using the Identity domain here is not so good. + It is needed to create admin role and user for newly created tenants. + We can convert this to a distributed event subscribed by the IdentityService */ + typeof(AbpIdentityEntityFrameworkCoreModule) )] public class TenantManagementServiceHostModule : AbpModule { From e0cfb6c50dd36bbad23791e67e4e3727e32c9048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 20:49:03 +0300 Subject: [PATCH 10/15] Change log level for Microsoft.EntityFrameworkCore --- samples/MicroserviceDemo/applications/AuthServer.Host/Program.cs | 1 + .../applications/BackendAdminApp.Host/Program.cs | 1 + .../MicroserviceDemo/applications/PublicWebSite.Host/Program.cs | 1 + .../gateways/BackendAdminAppGateway.Host/Program.cs | 1 + .../MicroserviceDemo/gateways/InternalGateway.Host/Program.cs | 1 + .../gateways/PublicWebSiteGateway.Host/Program.cs | 1 + .../microservices/BloggingService.Host/Program.cs | 1 + .../microservices/IdentityService.Host/Program.cs | 1 + .../microservices/ProductService.Host/Program.cs | 1 + .../microservices/TenantManagementService.Host/Program.cs | 1 + 10 files changed, 10 insertions(+) diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Program.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Program.cs index ab4c2ba330..6b60b3f71f 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/Program.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Program.cs @@ -24,6 +24,7 @@ namespace AuthServer.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "AuthServer") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/Program.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/Program.cs index 4b001972e4..e875d16011 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/Program.cs +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/Program.cs @@ -23,6 +23,7 @@ namespace BackendAdminApp.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "BackendAdminApp") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/Program.cs b/samples/MicroserviceDemo/applications/PublicWebSite.Host/Program.cs index 75435b7a9f..f3cb6f0ac0 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/Program.cs +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/Program.cs @@ -23,6 +23,7 @@ namespace PublicWebSite.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "PublicWebSite") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/Program.cs b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/Program.cs index 4eeaab28f3..13a8d5227e 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/Program.cs +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/Program.cs @@ -23,6 +23,7 @@ namespace BackendAdminAppGateway.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "BackendAdminAppGateway") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/Program.cs b/samples/MicroserviceDemo/gateways/InternalGateway.Host/Program.cs index 88432ac54d..97f7d5884f 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/Program.cs +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/Program.cs @@ -23,6 +23,7 @@ namespace InternalGateway.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "InternalGateway") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/Program.cs b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/Program.cs index f41a11e156..f7ed036879 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/Program.cs +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/Program.cs @@ -23,6 +23,7 @@ namespace PublicWebSiteGateway.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "PublicWebSiteGateway") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs b/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs index e09fc7b1cc..605a481a3a 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/Program.cs @@ -23,6 +23,7 @@ namespace BloggingService.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "BloggingService") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/Program.cs b/samples/MicroserviceDemo/microservices/IdentityService.Host/Program.cs index 6b64284bc8..a28ec81677 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/Program.cs +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/Program.cs @@ -23,6 +23,7 @@ namespace IdentityService.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "IdentityService") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/Program.cs b/samples/MicroserviceDemo/microservices/ProductService.Host/Program.cs index 4f8998937e..82f74c694e 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/Program.cs +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/Program.cs @@ -23,6 +23,7 @@ namespace ProductService.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "ProductService") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") diff --git a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs index 2f0d621979..ba000a9a0a 100644 --- a/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs +++ b/samples/MicroserviceDemo/microservices/TenantManagementService.Host/Program.cs @@ -23,6 +23,7 @@ namespace TenantManagementService.Host Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.WithProperty("Application", "TenantManagementService") .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") From a9060c3d10f9fea5436746ba6186a97371119781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 4 Mar 2020 20:49:29 +0300 Subject: [PATCH 11/15] Add Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy and Volo.Abp.TenantManagement.EntityFrameworkCore dependencies. --- .../BackendAdminAppGateway.Host.csproj | 3 ++- .../BackendAdminAppGatewayHostModule.cs | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 7757bb5cc6..f0f2624e46 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -24,7 +24,7 @@ - + @@ -42,6 +42,7 @@ + diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs index bfbfe7f94a..c2e7150d96 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs @@ -13,6 +13,7 @@ using MsDemo.Shared; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; using Volo.Abp.Autofac; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; @@ -30,6 +31,7 @@ using Volo.Abp.PermissionManagement.IdentityServer; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.TenantManagement; +using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Blogging; namespace BackendAdminAppGateway.Host @@ -51,10 +53,11 @@ namespace BackendAdminAppGateway.Host typeof(AbpTenantManagementApplicationContractsModule), typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementHttpApiClientModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementApplicationModule), typeof(AbpFeatureManagementHttpApiModule), - typeof(AbpAspNetCoreMultiTenancyModule) + typeof(AbpAspNetCoreMvcUiMultiTenancyModule) )] public class BackendAdminAppGatewayHostModule : AbpModule { From 74e3e9637aea8e3c9a6687f443d0be402d17a8c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2020 19:07:38 +0300 Subject: [PATCH 12/15] Define TenantEto --- .../Volo/Abp/TenantManagement/TenantEto.cs | 12 ++++++++++++ .../AbpTenantManagementDomainModule.cs | 7 +++++++ 2 files changed, 19 insertions(+) create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantEto.cs diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantEto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantEto.cs new file mode 100644 index 0000000000..5818aad479 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantEto.cs @@ -0,0 +1,12 @@ +using System; + +namespace Volo.Abp.TenantManagement +{ + [Serializable] + public class TenantEto + { + public Guid Id { get; set; } + + public string Name { get; set; } + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainModule.cs index c179af1219..f882f8659e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.AutoMapper; using Volo.Abp.Data; using Volo.Abp.Domain; +using Volo.Abp.EventBus.Distributed; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.UI; @@ -19,10 +20,16 @@ namespace Volo.Abp.TenantManagement public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAutoMapperObjectMapper(); + Configure(options => { options.AddProfile(validate: true); }); + + Configure(options => + { + options.EtoMappings.Add(); + }); } } } From d9f3d5dddc866aea4eee713815294cbf5a1575a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2020 19:10:28 +0300 Subject: [PATCH 13/15] Add missing mapping --- .../TenantManagement/AbpTenantManagementDomainMappingProfile.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainMappingProfile.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainMappingProfile.cs index 435421d76d..31eb7c6d19 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainMappingProfile.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/AbpTenantManagementDomainMappingProfile.cs @@ -23,6 +23,8 @@ namespace Volo.Abp.TenantManagement return connStrings; }); }); + + CreateMap(); } } } From 2b0882bfdeca32668b8f0e58e76f362a80cee1c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2020 19:27:11 +0300 Subject: [PATCH 14/15] Handle tenant creation event and create admin user and role for the new tenant. --- .../IdentityService.Host.csproj | 1 + .../IdentityServiceHostModule.cs | 5 ++- .../TenantCreatedDistributedEventHandler.cs | 38 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 samples/MicroserviceDemo/microservices/IdentityService.Host/Tenants/TenantCreatedDistributedEventHandler.cs diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index 9bab4d252f..ec96f1ead6 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -29,6 +29,7 @@ + diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs index a9648a6748..7cc864b4bb 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityServiceHostModule.cs @@ -7,7 +7,6 @@ using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; using Microsoft.OpenApi.Models; using MsDemo.Shared; -using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.Auditing; @@ -24,6 +23,7 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; namespace IdentityService.Host { @@ -37,7 +37,8 @@ namespace IdentityService.Host typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpIdentityApplicationModule), - typeof(AbpAspNetCoreMultiTenancyModule) + typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule) )] public class IdentityServiceHostModule : AbpModule { diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/Tenants/TenantCreatedDistributedEventHandler.cs b/samples/MicroserviceDemo/microservices/IdentityService.Host/Tenants/TenantCreatedDistributedEventHandler.cs new file mode 100644 index 0000000000..b006251902 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/Tenants/TenantCreatedDistributedEventHandler.cs @@ -0,0 +1,38 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.MultiTenancy; +using Volo.Abp.TenantManagement; + +namespace IdentityService.Host.Tenants +{ + public class TenantCreatedDistributedEventHandler : IDistributedEventHandler>, ITransientDependency + { + public ILogger Logger { get; set; } + private readonly IDataSeeder _dataSeeder; + private readonly ICurrentTenant _currentTenant; + + public TenantCreatedDistributedEventHandler( + IDataSeeder dataSeeder, + ICurrentTenant currentTenant) + { + _dataSeeder = dataSeeder; + _currentTenant = currentTenant; + Logger = NullLogger.Instance; + } + + public async Task HandleEventAsync(EntityCreatedEto eventData) + { + Logger.LogInformation($"Handled distributed event for a new tenant creation. TenantId: {eventData.Entity.Id}"); + + using (_currentTenant.Change(eventData.Entity.Id, eventData.Entity.Name)) + { + await _dataSeeder.SeedAsync(tenantId: eventData.Entity.Id); + } + } + } +} From 6ad037199ca05b0f1cc58b6dfe990586ab2ac4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2020 19:40:04 +0300 Subject: [PATCH 15/15] Updated microservice document to explain multi-tenancy. --- docs/en/Samples/Microservice-Demo.md | 95 ++++-------------- .../images/microservice-sample-diagram-3.png | Bin 0 -> 337888 bytes .../images/microservice-sample-solution-2.png | Bin 0 -> 38533 bytes 3 files changed, 17 insertions(+), 78 deletions(-) create mode 100644 docs/en/images/microservice-sample-diagram-3.png create mode 100644 docs/en/images/microservice-sample-solution-2.png diff --git a/docs/en/Samples/Microservice-Demo.md b/docs/en/Samples/Microservice-Demo.md index ba32878ea6..cd917581e4 100644 --- a/docs/en/Samples/Microservice-Demo.md +++ b/docs/en/Samples/Microservice-Demo.md @@ -24,82 +24,15 @@ This sample aims to demonstrate a simple yet complete microservice solution; The diagram below shows the system: -![microservice-sample-diagram-2](../images/microservice-sample-diagram-2.png) +![microservice-sample-diagram-2](../images/microservice-sample-diagram-3.png) ### Source Code You can get the source code from [the GitHub repository](https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo). -### Status - -Initial version of this sample has been completed. Additional improvement are still in development. - ## Running the Solution -You can either run from the **source code** or from the pre-configured **docker-compose** file. - -### Using the Docker Containers - -#### Pre Requirements - -Running as docker containers is easier since all dependencies are pre-configured. You only need to install the [latest docker](https://docs.docker.com/compose/install/). - -#### Running Containers - -- Clone or download the [ABP repository](https://github.com/abpframework/abp). - -- Open a command line in the `samples/MicroserviceDemo` folder of the repository. - -- Pull images from Docker Hub: - - ``` - docker-compose -f docker-compose.yml -f docker-compose.migrations.yml pull - ``` - -- If you want to build images locally you may skip the above step and instead use build command: - - ``` - docker-compose -f docker-compose.yml -f docker-compose.migrations.yml build - ``` - - Building images may take a **long time** depending on your machine. - -- Restore SQL Server databases: - - ``` - docker-compose -f docker-compose.yml -f docker-compose.migrations.yml run restore-database - ``` - -- Start the containers: - - ``` - docker-compose up -d - ``` - -- Add this line to the end of your `hosts` file: - - ``` - 127.0.0.1 auth-server - ``` - - hosts file is located inside the `C:\Windows\System32\Drivers\etc\hosts` folder on Windows and `/etc/hosts` for Linux/MacOS. - -#### Run the Applications - -There are a few applications running in the containers you may want to explore: - -* Backend Admin Application (BackendAdminApp.Host): `http://localhost:51512` - *(Used to manage users & products in the system)* -* Public Web Site (PublicWebsite.Host): `http://localhost:51513` - *(Used to list products and run/manage the blog module)* -* Authentication Server (AuthServer.Host): `http://auth-server:51511/` - *(Used as a single sign on and authentication server built with IdentityServer4)* -* Kibana UI: `http://localhost:51510` - *(Use to show/trace logs written by all services/applications/gateways)* - -### Running From the Source Code - -#### Pre Requirements +### Pre Requirements To be able to run the solution from source code, following tools should be installed and running on your computer: @@ -110,19 +43,19 @@ To be able to run the solution from source code, following tools should be insta * [ElasticSearch](https://www.elastic.co/downloads/elasticsearch) 6.6+ * [Kibana](https://www.elastic.co/downloads/kibana) 6.6+ (optional, recommended to show logs) -#### Open & Build the Visual Studio Solution +### Open & Build the Visual Studio Solution * Open the `samples\MicroserviceDemo\MicroserviceDemo.sln` in Visual Studio 2017 (15.9.0+). * Run `dotnet restore` from the command line inside the `samples\MicroserviceDemo` folder. * Build the solution in Visual Studio. -#### Create Databases +### Create Databases MongoDB database is created dynamically, however you need to create database schemas for SQL server databases. The solution is configured to use Entity Core Code First migrations, so you can easily create databases. There are two SQL server databases in this solution. -##### MsDemo_Identity Database +#### MsDemo_Identity Database * Right click to the `AuthServer.Host` project and click to the `Set as startup project`. * Open the **Package Manager Console** (Tools -> Nuget Package Manager -> Package Manager Console) @@ -131,7 +64,7 @@ There are two SQL server databases in this solution. ![microservice-sample-update-database-authserver](../images/microservice-sample-update-database-authserver.png) -##### MsDemo_ProductManagement +#### MsDemo_ProductManagement - Right click to the `ProductService.Host` project and click to the `Set as startup project`. - Open the **Package Manager Console** (Tools -> Nuget Package Manager -> Package Manager Console) @@ -140,12 +73,13 @@ There are two SQL server databases in this solution. ![microservice-sample-update-database-products](../images/microservice-sample-update-database-products.png) -#### Run Projects +### Run Projects Run the projects with the following order (right click to each project, set as startup project an press Ctrl+F5 to run without debug): * AuthServer.Host * IdentityService.Host +* TenantManagementService.Host * BloggingService.Host * ProductService.Host * InternalGateway.Host @@ -160,7 +94,7 @@ When you run projects, they will add some initial demo data to their databases. The Visual Studio solution consists of multiple projects each have different roles in the system: -![microservice-sample-solution](../images/microservice-sample-solution.png) +![microservice-sample-solution](../images/microservice-sample-solution-2.png) ### Applications @@ -183,8 +117,9 @@ Gateways are used to provide a single entry point to the applications. It can al Microservices have no UI, but exposes some REST APIs. -- **IdentityService.Host**: Host the ABP Identity module which is used to manage users & roles. It has no additional service, but only hosts the Identity module's API. -- **BloggingService.Host**: Host the ABP Blogging module which is used to manage blog & posts (a typical blog application). It has no additional service, but only hosts the Blogging module's API. +- **IdentityService.Host**: Hosts the ABP Identity module which is used to manage users & roles. It has no additional service, but only hosts the Identity module's API. +- **TenantManagementService.Host**: Hosts the ABP Tenant Management module which is used to manage roles. It has no additional service, but only hosts the Tenant Management module's API. +- **BloggingService.Host**: Hosts the ABP Blogging module which is used to manage blog & posts (a typical blog application). It has no additional service, but only hosts the Blogging module's API. - **ProductService.Host**: Hosts the Product module (that is inside the solution) which is used to manage products. It also contains the EF Core migrations to create/update the Product Management database schema. ### Modules @@ -195,7 +130,7 @@ Microservices have no UI, but exposes some REST APIs. This solution is using multiple databases: -* **MsDemo_Identity**: An SQL database. Used **SQL Server** by default, but can be any DBMS supported by the EF Core. Shared by AuthServer and IdentityService. Also audit logs, permissions and settings are stored in this database (while they could easily have their own databases, shared the same database to keep it simple). +* **MsDemo_Identity**: An SQL database. Used **SQL Server** by default, but can be any DBMS supported by the EF Core. Shared by AuthServer, IdentityService and the TenantManagementService. Also audit logs, permissions and settings are stored in this database (while they could have their own databases, shared the same database to keep it simple). * **MsDemo_ProductManagement**: An SQL database. Again, used **SQL Server** by default, but can be any DBMS supported by the EF Core. Used by the ProductService as a dedicated database. * **MsDemo_Blogging**: A **MongoDB** database. Used by the BloggingService. * **Elasticsearch**: Used to write logs over Serilog. @@ -1472,3 +1407,7 @@ ABP provides automatic audit logging which saves every request in detail (who is All of the services and applications are configured to write audit logs. Audit logs are saved to the MsDemo_Identity SQL database. So, you can query all audit logs of all applications from a single point. An Audit Log record has a `CorrelationId` property that can be used to track a request. When a service calls another service in a single web request, they both save audit logs with the same `CorrelationId`. See the `AbpAuditLogs` table in the database. + +### Multi-Tenancy + +The solution has been configured to provide a [multi-tenant](../Multi-Tenancy.md) system, where each tenant can have their isolated users, roles, permissions and other data. \ No newline at end of file diff --git a/docs/en/images/microservice-sample-diagram-3.png b/docs/en/images/microservice-sample-diagram-3.png new file mode 100644 index 0000000000000000000000000000000000000000..b8066ef6be1245a18290a9f6bf9426b2f095963b GIT binary patch literal 337888 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

OYs&iWn0E&M5>P0 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%0AQ3y|{WO5ZTnL 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 literal 0 HcmV?d00001 diff --git a/docs/en/images/microservice-sample-solution-2.png b/docs/en/images/microservice-sample-solution-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3da5d160f8fa71c7fd96b2f642c2c4d1a243eba2 GIT binary patch literal 38533 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