From 96ae74aef7a1b3bb71cf768b3a0e458390258d8f Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 11 Feb 2019 13:41:26 +0300 Subject: [PATCH 01/21] resolved #791 --- ...03303_Audit_Log_Module_Changes.Designer.cs | 685 ++++++++++++++++++ ...20190211103303_Audit_Log_Module_Changes.cs | 74 ++ .../MyProjectNameDbContextModelSnapshot.cs | 24 +- ...04054_Audit_Log_Module_Changes.Designer.cs | 298 ++++++++ ...20190211104054_Audit_Log_Module_Changes.cs | 74 ++ .../DemoAppDbContextModelSnapshot.cs | 24 +- 6 files changed, 1159 insertions(+), 20 deletions(-) create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.Designer.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs create mode 100644 templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.Designer.cs create mode 100644 templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.Designer.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.Designer.cs new file mode 100644 index 0000000000..c4411f18a5 --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.Designer.cs @@ -0,0 +1,685 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MyCompanyName.MyProjectName.EntityFrameworkCore; + +namespace MyCompanyName.MyProjectName.Migrations +{ + [DbContext(typeof(MyProjectNameDbContext))] + [Migration("20190211103303_Audit_Log_Module_Changes")] + partial class Audit_Log_Module_Changes + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.1-servicing-10028") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId"); + + b.Property("TenantId") + .HasColumnName("TenantId"); + + b.Property("Url") + .HasColumnName("Url") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasColumnName("UserName") + .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(); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasMaxLength(256); + + b.Property("TenantId"); + + 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(); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasMaxLength(128); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnName("TenantId"); + + 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(); + + b.Property("EntityChangeId"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasMaxLength(64); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasDefaultValue(false); + + b.Property("JobArgs") + .IsRequired() + .HasMaxLength(1048576); + + b.Property("JobName") + .IsRequired() + .HasMaxLength(128); + + b.Property("LastTryTime"); + + b.Property("NextTryTime"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasDefaultValue((byte)15); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasDefaultValue((short)0); + + b.HasKey("Id"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("AbpBackgroundJobs"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasMaxLength(256); + + b.Property("Description") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256); + + b.Property("Regex") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasMaxLength(128); + + b.Property("Required"); + + b.Property("ValueType"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasMaxLength(1024); + + b.Property("RoleId"); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .HasColumnName("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasDefaultValue(false); + + b.Property("LockoutEnd"); + + b.Property("Name") + .HasColumnName("Name") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .HasColumnName("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .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") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasMaxLength(1024); + + b.Property("TenantId"); + + b.Property("UserId"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId"); + + b.Property("LoginProvider") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196); + + b.Property("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.Property("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider") + .HasMaxLength(64); + + b.Property("Name") + .HasMaxLength(128); + + b.Property("TenantId"); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog") + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog") + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange") + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole") + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs new file mode 100644 index 0000000000..01e4baa2b4 --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs @@ -0,0 +1,74 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace MyCompanyName.MyProjectName.Migrations +{ + public partial class Audit_Log_Module_Changes : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges"); + + migrationBuilder.DropIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges"); + + migrationBuilder.DropColumn( + name: "EntityChangeId1", + table: "AbpEntityPropertyChanges"); + + migrationBuilder.AddColumn( + name: "ApplicationName", + table: "AbpAuditLogs", + maxLength: 96, + nullable: true); + + migrationBuilder.AddColumn( + name: "ClientId", + table: "AbpAuditLogs", + maxLength: 64, + nullable: true); + + migrationBuilder.AddColumn( + name: "CorrelationId", + table: "AbpAuditLogs", + maxLength: 64, + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "ApplicationName", + table: "AbpAuditLogs"); + + migrationBuilder.DropColumn( + name: "ClientId", + table: "AbpAuditLogs"); + + migrationBuilder.DropColumn( + name: "CorrelationId", + table: "AbpAuditLogs"); + + migrationBuilder.AddColumn( + name: "EntityChangeId1", + table: "AbpEntityPropertyChanges", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId1"); + + migrationBuilder.AddForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId1", + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs index a1e702f708..1d2a225f38 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace MyCompanyName.MyProjectName.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "2.2.0-rtm-35687") + .HasAnnotation("ProductVersion", "2.2.1-servicing-10028") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -24,10 +24,18 @@ namespace MyCompanyName.MyProjectName.Migrations b.Property("Id") .ValueGeneratedOnAdd(); + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasMaxLength(96); + b.Property("BrowserInfo") .HasColumnName("BrowserInfo") .HasMaxLength(512); + b.Property("ClientId") + .HasColumnName("ClientId") + .HasMaxLength(64); + b.Property("ClientIpAddress") .HasColumnName("ClientIpAddress") .HasMaxLength(64); @@ -42,6 +50,10 @@ namespace MyCompanyName.MyProjectName.Migrations b.Property("ConcurrencyStamp"); + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasMaxLength(64); + b.Property("Exceptions") .HasColumnName("Exceptions") .HasMaxLength(4000); @@ -176,8 +188,6 @@ namespace MyCompanyName.MyProjectName.Migrations b.Property("EntityChangeId"); - b.Property("EntityChangeId1"); - b.Property("NewValue") .HasColumnName("NewValue") .HasMaxLength(512); @@ -202,8 +212,6 @@ namespace MyCompanyName.MyProjectName.Migrations b.HasIndex("EntityChangeId"); - b.HasIndex("EntityChangeId1"); - b.ToTable("AbpEntityPropertyChanges"); }); @@ -620,13 +628,9 @@ namespace MyCompanyName.MyProjectName.Migrations modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => { b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany() + .WithMany("PropertyChanges") .HasForeignKey("EntityChangeId") .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId1"); }); modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.Designer.cs b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.Designer.cs new file mode 100644 index 0000000000..6cb69209a1 --- /dev/null +++ b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.Designer.cs @@ -0,0 +1,298 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MyCompanyName.MyProjectName.Host; + +namespace MyCompanyName.MyProjectName.Host.Migrations +{ + [DbContext(typeof(DemoAppDbContext))] + [Migration("20190211104054_Audit_Log_Module_Changes")] + partial class Audit_Log_Module_Changes + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.1-servicing-10028") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId"); + + b.Property("TenantId") + .HasColumnName("TenantId"); + + b.Property("Url") + .HasColumnName("Url") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasColumnName("UserName") + .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(); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasMaxLength(256); + + b.Property("TenantId"); + + 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(); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasMaxLength(128); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnName("TenantId"); + + 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(); + + b.Property("EntityChangeId"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasMaxLength(64); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog") + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog") + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange") + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs new file mode 100644 index 0000000000..f1ffddc955 --- /dev/null +++ b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs @@ -0,0 +1,74 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace MyCompanyName.MyProjectName.Host.Migrations +{ + public partial class Audit_Log_Module_Changes : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges"); + + migrationBuilder.DropIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges"); + + migrationBuilder.DropColumn( + name: "EntityChangeId1", + table: "AbpEntityPropertyChanges"); + + migrationBuilder.AddColumn( + name: "ApplicationName", + table: "AbpAuditLogs", + maxLength: 96, + nullable: true); + + migrationBuilder.AddColumn( + name: "ClientId", + table: "AbpAuditLogs", + maxLength: 64, + nullable: true); + + migrationBuilder.AddColumn( + name: "CorrelationId", + table: "AbpAuditLogs", + maxLength: 64, + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "ApplicationName", + table: "AbpAuditLogs"); + + migrationBuilder.DropColumn( + name: "ClientId", + table: "AbpAuditLogs"); + + migrationBuilder.DropColumn( + name: "CorrelationId", + table: "AbpAuditLogs"); + + migrationBuilder.AddColumn( + name: "EntityChangeId1", + table: "AbpEntityPropertyChanges", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId1"); + + migrationBuilder.AddForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId1", + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/DemoAppDbContextModelSnapshot.cs b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/DemoAppDbContextModelSnapshot.cs index 70e88b9973..5261599df5 100644 --- a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/DemoAppDbContextModelSnapshot.cs +++ b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/DemoAppDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "2.2.0-rtm-35687") + .HasAnnotation("ProductVersion", "2.2.1-servicing-10028") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -24,10 +24,18 @@ namespace MyCompanyName.MyProjectName.Host.Migrations b.Property("Id") .ValueGeneratedOnAdd(); + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasMaxLength(96); + b.Property("BrowserInfo") .HasColumnName("BrowserInfo") .HasMaxLength(512); + b.Property("ClientId") + .HasColumnName("ClientId") + .HasMaxLength(64); + b.Property("ClientIpAddress") .HasColumnName("ClientIpAddress") .HasMaxLength(64); @@ -42,6 +50,10 @@ namespace MyCompanyName.MyProjectName.Host.Migrations b.Property("ConcurrencyStamp"); + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasMaxLength(64); + b.Property("Exceptions") .HasColumnName("Exceptions") .HasMaxLength(4000); @@ -176,8 +188,6 @@ namespace MyCompanyName.MyProjectName.Host.Migrations b.Property("EntityChangeId"); - b.Property("EntityChangeId1"); - b.Property("NewValue") .HasColumnName("NewValue") .HasMaxLength(512); @@ -202,8 +212,6 @@ namespace MyCompanyName.MyProjectName.Host.Migrations b.HasIndex("EntityChangeId"); - b.HasIndex("EntityChangeId1"); - b.ToTable("AbpEntityPropertyChanges"); }); @@ -278,13 +286,9 @@ namespace MyCompanyName.MyProjectName.Host.Migrations modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => { b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany() + .WithMany("PropertyChanges") .HasForeignKey("EntityChangeId") .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId1"); }); #pragma warning restore 612, 618 } From 0f14fa44282ca0070e36b0ed92473032107df5d2 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Mon, 11 Feb 2019 13:45:05 +0300 Subject: [PATCH 02/21] Added todo. --- .../Mvc/Client/CachedApplicationConfigurationClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs index f7df64b257..557b7c8835 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs @@ -45,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client async () => await Proxy.Service.GetAsync(), () => new DistributedCacheEntryOptions { - AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(5) + AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(30) //TODO: Should be configurable. Default value should be higher (5 mins would be good). } ); From 539add21077a28ed051719ef2909fb98ded06b5e Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Mon, 11 Feb 2019 13:45:18 +0300 Subject: [PATCH 03/21] Use single DependsOn --- .../Volo/Abp/Emailing/AbpEmailingModule.cs | 3 +-- .../MultiTenancy/AbpMultiTenancyAbstractionsModule.cs | 11 ++++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs index 4a23ecae9a..7648ddc910 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/AbpEmailingModule.cs @@ -1,5 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.BackgroundJobs; +using Volo.Abp.BackgroundJobs; using Volo.Abp.Emailing.Templates; using Volo.Abp.Emailing.Templates.Virtual; using Volo.Abp.Localization; diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs index 05fc338c67..c695a84664 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs @@ -1,13 +1,14 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Data; +using Volo.Abp.Data; using Volo.Abp.Modularity; using Volo.Abp.Settings; namespace Volo.Abp.MultiTenancy { - [DependsOn(typeof(AbpDataModule))] - [DependsOn(typeof(AbpSettingsModule))] - public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule + [DependsOn( + typeof(AbpDataModule), + typeof(AbpSettingsModule) + )] + public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule? { public override void ConfigureServices(ServiceConfigurationContext context) { From 272258dae03c44d06cdd8be2dd49c400ce1d2854 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 11 Feb 2019 13:59:51 +0300 Subject: [PATCH 04/21] #791 cont. --- .../20190107113038_Initial.Designer.cs | 681 ------------------ ...20190211103303_Audit_Log_Module_Changes.cs | 74 -- ....cs => 20190211104804_Initial.Designer.cs} | 4 +- ...8_Initial.cs => 20190211104804_Initial.cs} | 17 +- ...e.MyProjectName.EntityFrameworkCore.csproj | 6 +- .../20190107114531_Initial.Designer.cs | 294 -------- ...20190211104054_Audit_Log_Module_Changes.cs | 74 -- ....cs => 20190211105121_Initial.Designer.cs} | 4 +- ...1_Initial.cs => 20190211105121_Initial.cs} | 17 +- .../MyCompanyName.MyProjectName.Host.csproj | 3 +- 10 files changed, 14 insertions(+), 1160 deletions(-) delete mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190107113038_Initial.Designer.cs delete mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs rename templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/{20190211103303_Audit_Log_Module_Changes.Designer.cs => 20190211104804_Initial.Designer.cs} (99%) rename templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/{20190107113038_Initial.cs => 20190211104804_Initial.cs} (97%) delete mode 100644 templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190107114531_Initial.Designer.cs delete mode 100644 templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs rename templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/{20190211104054_Audit_Log_Module_Changes.Designer.cs => 20190211105121_Initial.Designer.cs} (99%) rename templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/{20190107114531_Initial.cs => 20190211105121_Initial.cs} (93%) diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190107113038_Initial.Designer.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190107113038_Initial.Designer.cs deleted file mode 100644 index f39ddf1cc7..0000000000 --- a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190107113038_Initial.Designer.cs +++ /dev/null @@ -1,681 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using MyCompanyName.MyProjectName.EntityFrameworkCore; - -namespace MyCompanyName.MyProjectName.Migrations -{ - [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20190107113038_Initial")] - partial class Initial - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "2.2.0-rtm-35687") - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("BrowserInfo") - .HasColumnName("BrowserInfo") - .HasMaxLength(512); - - b.Property("ClientIpAddress") - .HasColumnName("ClientIpAddress") - .HasMaxLength(64); - - b.Property("ClientName") - .HasColumnName("ClientName") - .HasMaxLength(128); - - b.Property("Comments") - .HasColumnName("Comments") - .HasMaxLength(256); - - b.Property("ConcurrencyStamp"); - - b.Property("Exceptions") - .HasColumnName("Exceptions") - .HasMaxLength(4000); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasColumnName("HttpMethod") - .HasMaxLength(16); - - b.Property("HttpStatusCode") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorUserId") - .HasColumnName("ImpersonatorUserId"); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - b.Property("Url") - .HasColumnName("Url") - .HasMaxLength(256); - - b.Property("UserId") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasColumnName("UserName") - .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(); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasColumnName("MethodName") - .HasMaxLength(128); - - b.Property("Parameters") - .HasColumnName("Parameters") - .HasMaxLength(2000); - - b.Property("ServiceName") - .HasColumnName("ServiceName") - .HasMaxLength(256); - - b.Property("TenantId"); - - 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(); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .IsRequired() - .HasColumnName("EntityId") - .HasMaxLength(128); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasColumnName("EntityTypeFullName") - .HasMaxLength(128); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - 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(); - - b.Property("EntityChangeId"); - - b.Property("EntityChangeId1"); - - b.Property("NewValue") - .HasColumnName("NewValue") - .HasMaxLength(512); - - b.Property("OriginalValue") - .HasColumnName("OriginalValue") - .HasMaxLength(512); - - b.Property("PropertyName") - .IsRequired() - .HasColumnName("PropertyName") - .HasMaxLength(128); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasColumnName("PropertyTypeFullName") - .HasMaxLength(64); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.HasIndex("EntityChangeId1"); - - b.ToTable("AbpEntityPropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnName("CreationTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsAbandoned") - .ValueGeneratedOnAdd() - .HasDefaultValue(false); - - b.Property("JobArgs") - .IsRequired() - .HasMaxLength(1048576); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(128); - - b.Property("LastTryTime"); - - b.Property("NextTryTime"); - - b.Property("Priority") - .ValueGeneratedOnAdd() - .HasDefaultValue((byte)15); - - b.Property("TryCount") - .ValueGeneratedOnAdd() - .HasDefaultValue((short)0); - - b.HasKey("Id"); - - b.HasIndex("IsAbandoned", "NextTryTime"); - - b.ToTable("AbpBackgroundJobs"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasColumnName("ConcurrencyStamp") - .HasMaxLength(256); - - b.Property("Description") - .HasMaxLength(256); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256); - - b.Property("Regex") - .HasMaxLength(512); - - b.Property("RegexDescription") - .HasMaxLength(128); - - b.Property("Required"); - - b.Property("ValueType"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasColumnName("ConcurrencyStamp") - .HasMaxLength(256); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsDefault") - .HasColumnName("IsDefault"); - - b.Property("IsPublic") - .HasColumnName("IsPublic"); - - b.Property("IsStatic") - .HasColumnName("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256); - - b.Property("NormalizedName") - .IsRequired() - .HasMaxLength(256); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256); - - b.Property("ClaimValue") - .HasMaxLength(1024); - - b.Property("RoleId"); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnName("AccessFailedCount") - .HasDefaultValue(0); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime"); - - b.Property("Email") - .HasColumnName("Email") - .HasMaxLength(256); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnName("EmailConfirmed") - .HasDefaultValue(false); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnName("LockoutEnabled") - .HasDefaultValue(false); - - b.Property("LockoutEnd"); - - b.Property("Name") - .HasColumnName("Name") - .HasMaxLength(64); - - b.Property("NormalizedEmail") - .HasColumnName("NormalizedEmail") - .HasMaxLength(256); - - b.Property("NormalizedUserName") - .IsRequired() - .HasColumnName("NormalizedUserName") - .HasMaxLength(256); - - b.Property("PasswordHash") - .HasColumnName("PasswordHash") - .HasMaxLength(256); - - b.Property("PhoneNumber") - .HasColumnName("PhoneNumber") - .HasMaxLength(16); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnName("PhoneNumberConfirmed") - .HasDefaultValue(false); - - b.Property("SecurityStamp") - .IsRequired() - .HasColumnName("SecurityStamp") - .HasMaxLength(256); - - b.Property("Surname") - .HasColumnName("Surname") - .HasMaxLength(64); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnName("TwoFactorEnabled") - .HasDefaultValue(false); - - b.Property("UserName") - .IsRequired() - .HasColumnName("UserName") - .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") - .ValueGeneratedOnAdd(); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256); - - b.Property("ClaimValue") - .HasMaxLength(1024); - - b.Property("TenantId"); - - b.Property("UserId"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId"); - - b.Property("LoginProvider") - .HasMaxLength(64); - - b.Property("ProviderDisplayName") - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(196); - - b.Property("TenantId"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId"); - - b.Property("RoleId"); - - b.Property("TenantId"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId"); - - b.Property("LoginProvider") - .HasMaxLength(64); - - b.Property("Name") - .HasMaxLength(128); - - b.Property("TenantId"); - - b.Property("Value"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens"); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpPermissionGrants"); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128); - - b.Property("ProviderKey") - .HasMaxLength(64); - - b.Property("ProviderName") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpSettings"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany() - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId1"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole") - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole") - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs deleted file mode 100644 index 01e4baa2b4..0000000000 --- a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace MyCompanyName.MyProjectName.Migrations -{ - public partial class Audit_Log_Module_Changes : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges"); - - migrationBuilder.DropIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges"); - - migrationBuilder.DropColumn( - name: "EntityChangeId1", - table: "AbpEntityPropertyChanges"); - - migrationBuilder.AddColumn( - name: "ApplicationName", - table: "AbpAuditLogs", - maxLength: 96, - nullable: true); - - migrationBuilder.AddColumn( - name: "ClientId", - table: "AbpAuditLogs", - maxLength: 64, - nullable: true); - - migrationBuilder.AddColumn( - name: "CorrelationId", - table: "AbpAuditLogs", - maxLength: 64, - nullable: true); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "ApplicationName", - table: "AbpAuditLogs"); - - migrationBuilder.DropColumn( - name: "ClientId", - table: "AbpAuditLogs"); - - migrationBuilder.DropColumn( - name: "CorrelationId", - table: "AbpAuditLogs"); - - migrationBuilder.AddColumn( - name: "EntityChangeId1", - table: "AbpEntityPropertyChanges", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId1"); - - migrationBuilder.AddForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId1", - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - } -} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.Designer.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211104804_Initial.Designer.cs similarity index 99% rename from templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.Designer.cs rename to templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211104804_Initial.Designer.cs index c4411f18a5..2002970aad 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211103303_Audit_Log_Module_Changes.Designer.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211104804_Initial.Designer.cs @@ -10,8 +10,8 @@ using MyCompanyName.MyProjectName.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20190211103303_Audit_Log_Module_Changes")] - partial class Audit_Log_Module_Changes + [Migration("20190211104804_Initial")] + partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190107113038_Initial.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211104804_Initial.cs similarity index 97% rename from templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190107113038_Initial.cs rename to templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211104804_Initial.cs index 72aba4d129..8f177b29fb 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190107113038_Initial.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20190211104804_Initial.cs @@ -14,6 +14,7 @@ namespace MyCompanyName.MyProjectName.Migrations Id = table.Column(nullable: false), ExtraProperties = table.Column(nullable: true), ConcurrencyStamp = table.Column(nullable: true), + ApplicationName = table.Column(maxLength: 96, nullable: true), UserId = table.Column(nullable: true), UserName = table.Column(maxLength: 256, nullable: true), TenantId = table.Column(nullable: true), @@ -23,6 +24,8 @@ namespace MyCompanyName.MyProjectName.Migrations ExecutionDuration = table.Column(nullable: false), ClientIpAddress = table.Column(maxLength: 64, nullable: true), ClientName = table.Column(maxLength: 128, nullable: true), + ClientId = table.Column(maxLength: 64, nullable: true), + CorrelationId = table.Column(maxLength: 64, nullable: true), BrowserInfo = table.Column(maxLength: 512, nullable: true), HttpMethod = table.Column(maxLength: 16, nullable: true), Url = table.Column(maxLength: 256, nullable: true), @@ -329,8 +332,7 @@ namespace MyCompanyName.MyProjectName.Migrations NewValue = table.Column(maxLength: 512, nullable: true), OriginalValue = table.Column(maxLength: 512, nullable: true), PropertyName = table.Column(maxLength: 128, nullable: false), - PropertyTypeFullName = table.Column(maxLength: 64, nullable: false), - EntityChangeId1 = table.Column(nullable: true) + PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) }, constraints: table => { @@ -341,12 +343,6 @@ namespace MyCompanyName.MyProjectName.Migrations principalTable: "AbpEntityChanges", principalColumn: "Id", onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", - column: x => x.EntityChangeId1, - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateIndex( @@ -389,11 +385,6 @@ namespace MyCompanyName.MyProjectName.Migrations table: "AbpEntityPropertyChanges", column: "EntityChangeId"); - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId1"); - migrationBuilder.CreateIndex( name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", table: "AbpPermissionGrants", diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj index 7788dcfdea..f84de6cd67 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj @@ -6,11 +6,7 @@ - - - - - + diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190107114531_Initial.Designer.cs b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190107114531_Initial.Designer.cs deleted file mode 100644 index 600c904f2b..0000000000 --- a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190107114531_Initial.Designer.cs +++ /dev/null @@ -1,294 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using MyCompanyName.MyProjectName.Host; - -namespace MyCompanyName.MyProjectName.Host.Migrations -{ - [DbContext(typeof(DemoAppDbContext))] - [Migration("20190107114531_Initial")] - partial class Initial - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "2.2.0-rtm-35687") - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("BrowserInfo") - .HasColumnName("BrowserInfo") - .HasMaxLength(512); - - b.Property("ClientIpAddress") - .HasColumnName("ClientIpAddress") - .HasMaxLength(64); - - b.Property("ClientName") - .HasColumnName("ClientName") - .HasMaxLength(128); - - b.Property("Comments") - .HasColumnName("Comments") - .HasMaxLength(256); - - b.Property("ConcurrencyStamp"); - - b.Property("Exceptions") - .HasColumnName("Exceptions") - .HasMaxLength(4000); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasColumnName("HttpMethod") - .HasMaxLength(16); - - b.Property("HttpStatusCode") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorUserId") - .HasColumnName("ImpersonatorUserId"); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - b.Property("Url") - .HasColumnName("Url") - .HasMaxLength(256); - - b.Property("UserId") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasColumnName("UserName") - .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(); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasColumnName("MethodName") - .HasMaxLength(128); - - b.Property("Parameters") - .HasColumnName("Parameters") - .HasMaxLength(2000); - - b.Property("ServiceName") - .HasColumnName("ServiceName") - .HasMaxLength(256); - - b.Property("TenantId"); - - 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(); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .IsRequired() - .HasColumnName("EntityId") - .HasMaxLength(128); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasColumnName("EntityTypeFullName") - .HasMaxLength(128); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - 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(); - - b.Property("EntityChangeId"); - - b.Property("EntityChangeId1"); - - b.Property("NewValue") - .HasColumnName("NewValue") - .HasMaxLength(512); - - b.Property("OriginalValue") - .HasColumnName("OriginalValue") - .HasMaxLength(512); - - b.Property("PropertyName") - .IsRequired() - .HasColumnName("PropertyName") - .HasMaxLength(128); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasColumnName("PropertyTypeFullName") - .HasMaxLength(64); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.HasIndex("EntityChangeId1"); - - b.ToTable("AbpEntityPropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpPermissionGrants"); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128); - - b.Property("ProviderKey") - .HasMaxLength(64); - - b.Property("ProviderName") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpSettings"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany() - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId1"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs deleted file mode 100644 index f1ffddc955..0000000000 --- a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace MyCompanyName.MyProjectName.Host.Migrations -{ - public partial class Audit_Log_Module_Changes : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges"); - - migrationBuilder.DropIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges"); - - migrationBuilder.DropColumn( - name: "EntityChangeId1", - table: "AbpEntityPropertyChanges"); - - migrationBuilder.AddColumn( - name: "ApplicationName", - table: "AbpAuditLogs", - maxLength: 96, - nullable: true); - - migrationBuilder.AddColumn( - name: "ClientId", - table: "AbpAuditLogs", - maxLength: 64, - nullable: true); - - migrationBuilder.AddColumn( - name: "CorrelationId", - table: "AbpAuditLogs", - maxLength: 64, - nullable: true); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "ApplicationName", - table: "AbpAuditLogs"); - - migrationBuilder.DropColumn( - name: "ClientId", - table: "AbpAuditLogs"); - - migrationBuilder.DropColumn( - name: "CorrelationId", - table: "AbpAuditLogs"); - - migrationBuilder.AddColumn( - name: "EntityChangeId1", - table: "AbpEntityPropertyChanges", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId1"); - - migrationBuilder.AddForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId1", - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - } -} diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.Designer.cs b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211105121_Initial.Designer.cs similarity index 99% rename from templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.Designer.cs rename to templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211105121_Initial.Designer.cs index 6cb69209a1..61c15431db 100644 --- a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211104054_Audit_Log_Module_Changes.Designer.cs +++ b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211105121_Initial.Designer.cs @@ -10,8 +10,8 @@ using MyCompanyName.MyProjectName.Host; namespace MyCompanyName.MyProjectName.Host.Migrations { [DbContext(typeof(DemoAppDbContext))] - [Migration("20190211104054_Audit_Log_Module_Changes")] - partial class Audit_Log_Module_Changes + [Migration("20190211105121_Initial")] + partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190107114531_Initial.cs b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211105121_Initial.cs similarity index 93% rename from templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190107114531_Initial.cs rename to templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211105121_Initial.cs index fd1c985c5d..b2074c3513 100644 --- a/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190107114531_Initial.cs +++ b/templates/service/host/MyCompanyName.MyProjectName.Host/Migrations/20190211105121_Initial.cs @@ -14,6 +14,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations Id = table.Column(nullable: false), ExtraProperties = table.Column(nullable: true), ConcurrencyStamp = table.Column(nullable: true), + ApplicationName = table.Column(maxLength: 96, nullable: true), UserId = table.Column(nullable: true), UserName = table.Column(maxLength: 256, nullable: true), TenantId = table.Column(nullable: true), @@ -23,6 +24,8 @@ namespace MyCompanyName.MyProjectName.Host.Migrations ExecutionDuration = table.Column(nullable: false), ClientIpAddress = table.Column(maxLength: 64, nullable: true), ClientName = table.Column(maxLength: 128, nullable: true), + ClientId = table.Column(maxLength: 64, nullable: true), + CorrelationId = table.Column(maxLength: 64, nullable: true), BrowserInfo = table.Column(maxLength: 512, nullable: true), HttpMethod = table.Column(maxLength: 16, nullable: true), Url = table.Column(maxLength: 256, nullable: true), @@ -124,8 +127,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations NewValue = table.Column(maxLength: 512, nullable: true), OriginalValue = table.Column(maxLength: 512, nullable: true), PropertyName = table.Column(maxLength: 128, nullable: false), - PropertyTypeFullName = table.Column(maxLength: 64, nullable: false), - EntityChangeId1 = table.Column(nullable: true) + PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) }, constraints: table => { @@ -136,12 +138,6 @@ namespace MyCompanyName.MyProjectName.Host.Migrations principalTable: "AbpEntityChanges", principalColumn: "Id", onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId1", - column: x => x.EntityChangeId1, - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateIndex( @@ -179,11 +175,6 @@ namespace MyCompanyName.MyProjectName.Host.Migrations table: "AbpEntityPropertyChanges", column: "EntityChangeId"); - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId1", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId1"); - migrationBuilder.CreateIndex( name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", table: "AbpPermissionGrants", diff --git a/templates/service/host/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj b/templates/service/host/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj index b034148995..ca352a43b3 100644 --- a/templates/service/host/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj +++ b/templates/service/host/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj @@ -31,8 +31,7 @@ - - + From 9e4770eac21f4046b25eb2d9466ec91894cc3956 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Mon, 11 Feb 2019 14:41:33 +0300 Subject: [PATCH 05/21] #792 added ISettingProvider service --- .../Mvc/UI/RazorPages/AbpPageModel.cs | 2 +- .../AbpApplicationBuilderExtensions.cs | 6 +- .../Permissions/PermissionDefinition.cs | 4 + .../Services/ApplicationService.cs | 2 +- .../Abp/Emailing/EmailSenderConfiguration.cs | 10 +- .../Smtp/SmtpEmailSenderConfiguration.cs | 10 +- .../LanguageProviderExtensions.cs | 2 +- .../Volo/Abp/Settings/ISettingProvider.cs | 13 +++ .../Volo/Abp/Settings/SettingDefinition.cs | 31 ++++++ .../Volo/Abp/Settings/SettingProvider.cs | 102 ++++++++++++++++++ .../Abp/Settings/SettingProviderExtensions.cs | 56 ++++++++++ .../Volo/Abp/Settings/SettingValue.cs | 5 +- .../Abp/Settings/SettingProvider_Tests.cs | 30 ++++++ 13 files changed, 256 insertions(+), 17 deletions(-) create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingProvider.cs create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs create mode 100644 framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs index 78b9d407a5..8fd16f5864 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/RazorPages/AbpPageModel.cs @@ -60,7 +60,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.RazorPages public ICurrentTenant CurrentTenant { get; set; } - public ISettingManager SettingManager { get; set; } + public ISettingProvider SettingProvider { get; set; } public IModelStateValidator ModelValidator { get; set; } diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs index 7441e78130..4d7efb1d9d 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs @@ -48,10 +48,10 @@ namespace Microsoft.AspNetCore.Builder using (var scope = app.ApplicationServices.CreateScope()) { var languageProvider = scope.ServiceProvider.GetRequiredService(); - var settingManager = scope.ServiceProvider.GetRequiredService(); + languages = languageProvider.GetLanguages(); - languages = AsyncHelper.RunSync(() => languageProvider.GetLanguagesAsync()); - defaultLanguage = settingManager.GetOrNull(LocalizationSettingNames.DefaultLanguage); + var settingProvider = scope.ServiceProvider.GetRequiredService(); + defaultLanguage = settingProvider.GetOrNull(LocalizationSettingNames.DefaultLanguage); } if (!languages.Any()) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs index 66c3c78143..db0ea4f977 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs @@ -18,6 +18,10 @@ namespace Volo.Abp.Authorization.Permissions /// public PermissionDefinition Parent { get; private set; } + /// + /// A list of allowed providers to get value of this permission. + /// An empty list indicates that all providers are allowed. + /// public List Providers { get; } public ILocalizableString DisplayName diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs index 0e4b13cada..63a749e259 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs @@ -45,7 +45,7 @@ namespace Volo.Abp.Application.Services public ICurrentUser CurrentUser { get; set; } - public ISettingManager SettingManager { get; set; } + public ISettingProvider SettingProvider { get; set; } public IClock Clock { get; set; } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs index 3293692cfb..3034481471 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs @@ -11,16 +11,16 @@ namespace Volo.Abp.Emailing { public virtual string DefaultFromAddress => GetNotEmptySettingValue(EmailSettingNames.DefaultFromAddress); - public virtual string DefaultFromDisplayName => SettingManager.GetOrNull(EmailSettingNames.DefaultFromDisplayName); + public virtual string DefaultFromDisplayName => SettingProvider.GetOrNull(EmailSettingNames.DefaultFromDisplayName); - protected readonly ISettingManager SettingManager; + protected readonly ISettingProvider SettingProvider; /// /// Creates a new . /// - protected EmailSenderConfiguration(ISettingManager settingManager) + protected EmailSenderConfiguration(ISettingProvider settingProvider) { - SettingManager = settingManager; + SettingProvider = settingProvider; } /// @@ -30,7 +30,7 @@ namespace Volo.Abp.Emailing /// Value of the setting protected string GetNotEmptySettingValue(string name) { - var value = SettingManager.GetOrNull(name); + var value = SettingProvider.GetOrNull(name); if (value.IsNullOrEmpty()) { diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSenderConfiguration.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSenderConfiguration.cs index b114cc43dd..678d2cc4f2 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSenderConfiguration.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSenderConfiguration.cs @@ -18,14 +18,14 @@ namespace Volo.Abp.Emailing.Smtp public virtual string Password => GetNotEmptySettingValue(EmailSettingNames.Smtp.Password); - public virtual string Domain => SettingManager.GetOrNull(EmailSettingNames.Smtp.Domain); + public virtual string Domain => SettingProvider.GetOrNull(EmailSettingNames.Smtp.Domain); - public virtual bool EnableSsl => SettingManager.GetOrNull(EmailSettingNames.Smtp.EnableSsl).To(); + public virtual bool EnableSsl => SettingProvider.GetOrNull(EmailSettingNames.Smtp.EnableSsl).To(); - public virtual bool UseDefaultCredentials => SettingManager.GetOrNull(EmailSettingNames.Smtp.UseDefaultCredentials).To(); + public virtual bool UseDefaultCredentials => SettingProvider.GetOrNull(EmailSettingNames.Smtp.UseDefaultCredentials).To(); - public SmtpEmailSenderConfiguration(ISettingManager settingManager) - : base(settingManager) + public SmtpEmailSenderConfiguration(ISettingProvider settingProvider) + : base(settingProvider) { } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageProviderExtensions.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageProviderExtensions.cs index 5c7ffe6508..951292ac66 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageProviderExtensions.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageProviderExtensions.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.Localization { public static IReadOnlyList GetLanguages(this ILanguageProvider languageProvider) { - return AsyncHelper.RunSync(() => languageProvider.GetLanguagesAsync()); + return AsyncHelper.RunSync(languageProvider.GetLanguagesAsync); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingProvider.cs new file mode 100644 index 0000000000..608cf49105 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingProvider.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.Abp.Settings +{ + public interface ISettingProvider + { + Task GetOrNullAsync([NotNull]string name); + + Task> GetAllAsync(); + } +} diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs index cbbf810f84..1563de3291 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs @@ -36,6 +36,12 @@ namespace Volo.Abp.Settings /// public bool IsVisibleToClients { get; set; } + /// + /// A list of allowed providers to get value of this permission. + /// An empty list indicates that all providers are allowed. + /// + public List Providers { get; } + /// /// Is this setting inherited from parent scopes. /// Default: True. @@ -72,6 +78,31 @@ namespace Volo.Abp.Settings IsEncrypted = isEncrypted; Properties = new Dictionary(); + Providers = new List(); + } + + /// + /// Sets a property in the dictionary. + /// This is a shortcut for nested calls on this object. + /// + public virtual SettingDefinition WithProperty(string key, object value) + { + Properties[key] = value; + return this; + } + + /// + /// Sets a property in the dictionary. + /// This is a shortcut for nested calls on this object. + /// + public virtual SettingDefinition WithProviders(params string[] providers) + { + if (!providers.IsNullOrEmpty()) + { + Providers.AddRange(providers); + } + + return this; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs new file mode 100644 index 0000000000..b826a72e49 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Settings +{ + public class SettingProvider : ISettingProvider, ITransientDependency + { + protected ISettingDefinitionManager SettingDefinitionManager { get; } + protected Lazy> Providers { get; } + protected ISettingEncryptionService SettingEncryptionService { get; } + protected SettingOptions Options { get; } + + public SettingProvider( + IOptions options, + IServiceProvider serviceProvider, + ISettingDefinitionManager settingDefinitionManager, + ISettingEncryptionService settingEncryptionService) + { + SettingDefinitionManager = settingDefinitionManager; + SettingEncryptionService = settingEncryptionService; + + Options = options.Value; + + Providers = new Lazy>( + () => Options + .ValueProviders + .Select(c => serviceProvider.GetRequiredService(c) as ISettingValueProvider) + .ToList(), + true + ); + } + + public virtual async Task GetOrNullAsync(string name) + { + var setting = SettingDefinitionManager.Get(name); + var providers = Enumerable + .Reverse(Providers.Value); + + if (setting.Providers.Any()) + { + providers = providers.Where(p => setting.Providers.Contains(p.Name)); + } + + //TODO: How to implement setting.IsInherited? + + var value = await GetOrNullValueFromProvidersAsync(null, providers, setting); + if (setting.IsEncrypted) + { + value = SettingEncryptionService.Decrypt(setting, value); + } + + return value; + } + + public virtual async Task> GetAllAsync() + { + var settingValues = new Dictionary(); + var settingDefinitions = SettingDefinitionManager.GetAll(); + + foreach (var provider in Providers.Value) + { + foreach (var setting in settingDefinitions) + { + var value = await provider.GetOrNullAsync(setting, null); + if (value != null) + { + if (setting.IsEncrypted) + { + value = SettingEncryptionService.Decrypt(setting, value); + } + + settingValues[setting.Name] = new SettingValue(setting.Name, value); + } + } + } + + return settingValues.Values.ToList(); + } + + protected virtual async Task GetOrNullValueFromProvidersAsync( + string providerKey, + IEnumerable providers, + SettingDefinition setting) + { + foreach (var provider in providers) + { + var value = await provider.GetOrNullAsync(setting, providerKey); + if (value != null) + { + return value; + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs new file mode 100644 index 0000000000..d3f372baca --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Threading; + +namespace Volo.Abp.Settings +{ + public static class SettingProviderExtensions + { + public static async Task IsTrueAsync([NotNull] this ISettingProvider settingProvider, [NotNull] string name) + { + Check.NotNull(settingProvider, nameof(settingProvider)); + Check.NotNull(name, nameof(name)); + + return string.Equals( + await settingProvider.GetOrNullAsync(name), + "true", + StringComparison.OrdinalIgnoreCase + ); + } + + public static async Task GetAsync([NotNull] this ISettingProvider settingProvider, [NotNull] string name, T defaultValue = default) + where T : struct + { + Check.NotNull(settingProvider, nameof(settingProvider)); + Check.NotNull(name, nameof(name)); + + var value = await settingProvider.GetOrNullAsync(name); + return value?.To() ?? defaultValue; + } + + public static string GetOrNull([NotNull] this ISettingProvider settingProvider, [NotNull] string name) + { + Check.NotNull(settingProvider, nameof(settingProvider)); + return AsyncHelper.RunSync(() => settingProvider.GetOrNullAsync(name)); + } + + public static List GetAll([NotNull] this ISettingProvider settingProvider) + { + Check.NotNull(settingProvider, nameof(settingProvider)); + return AsyncHelper.RunSync(settingProvider.GetAllAsync); + } + + public static T Get([NotNull] this ISettingProvider settingProvider, [NotNull] string name, T defaultValue = default) + where T : struct + { + return AsyncHelper.RunSync(() => settingProvider.GetAsync(name, defaultValue)); + } + + public static bool IsTrue([NotNull] this ISettingProvider settingProvider, [NotNull] string name) + { + return AsyncHelper.RunSync(() => settingProvider.IsTrueAsync(name)); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValue.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValue.cs index 99b2de33f1..d7f48081dd 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValue.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValue.cs @@ -1,5 +1,8 @@ -namespace Volo.Abp.Settings +using System; + +namespace Volo.Abp.Settings { + [Serializable] public class SettingValue : NameValue { /// diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs new file mode 100644 index 0000000000..6b95b0f755 --- /dev/null +++ b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Settings +{ + public class SettingProvider_Tests : AbpIntegratedTest + { + private readonly ISettingProvider _settingProvider; + + public SettingProvider_Tests() + { + _settingProvider = GetRequiredService(); + } + + [Fact] + public async Task Should_Get_Null_If_No_Value_Provided_And_No_Default_Value() + { + (await _settingProvider.GetOrNullAsync(TestSettingNames.TestSettingWithoutDefaultValue)) + .ShouldBeNull(); + } + + [Fact] + public async Task Should_Get_Default_Value_If_No_Value_Provided_And_There_Is_A_Default_Value() + { + (await _settingProvider.GetOrNullAsync(TestSettingNames.TestSettingWithDefaultValue)) + .ShouldBe("default-value"); + } + } +} From 400b79dba9c2ca26763e2767ec68a6c5b656ca9a Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Mon, 11 Feb 2019 14:46:12 +0300 Subject: [PATCH 06/21] #793 Remove GetOrNullAsync & GetAllAsync from ISettingManager. --- .../Permissions/PermissionDefinition.cs | 2 +- .../Volo/Abp/Settings/ISettingManager.cs | 4 -- .../Volo/Abp/Settings/SettingDefinition.cs | 2 +- .../Volo/Abp/Settings/SettingManager.cs | 34 +----------- .../Abp/Settings/SettingManagerExtensions.cs | 31 ----------- .../Settings/SettingManagerSyncExtensions.cs | 34 ------------ .../Volo/Abp/Settings/SettingManager_Tests.cs | 53 ------------------- 7 files changed, 3 insertions(+), 157 deletions(-) delete mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerExtensions.cs delete mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerSyncExtensions.cs delete mode 100644 framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs index db0ea4f977..bb23757de5 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Authorization.Permissions public PermissionDefinition Parent { get; private set; } /// - /// A list of allowed providers to get value of this permission. + /// A list of allowed providers to get/set value of this permission. /// An empty list indicates that all providers are allowed. /// public List Providers { get; } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs index 9c794a2c9b..bd0b5c7d20 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs @@ -6,12 +6,8 @@ namespace Volo.Abp.Settings { public interface ISettingManager { - Task GetOrNullAsync([NotNull]string name); - Task GetOrNullAsync([NotNull]string name, [NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); - Task> GetAllAsync(); - Task> GetAllAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); Task SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false); diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs index 1563de3291..9f02389248 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.Settings public bool IsVisibleToClients { get; set; } /// - /// A list of allowed providers to get value of this permission. + /// A list of allowed providers to get/set value of this setting. /// An empty list indicates that all providers are allowed. /// public List Providers { get; } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs index 33087bab77..fffa1021a9 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs @@ -33,14 +33,7 @@ namespace Volo.Abp.Settings true ); } - - public virtual Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - return GetOrNullInternalAsync(name, null, null); - } - + public virtual Task GetOrNullAsync(string name, string providerName, string providerKey, bool fallback = true) { Check.NotNull(name, nameof(name)); @@ -49,31 +42,6 @@ namespace Volo.Abp.Settings return GetOrNullInternalAsync(name, providerName, providerKey, fallback); } - public virtual async Task> GetAllAsync() - { - var settingValues = new Dictionary(); - var settingDefinitions = SettingDefinitionManager.GetAll(); - - foreach (var provider in Providers.Value) - { - foreach (var setting in settingDefinitions) - { - var value = await provider.GetOrNullAsync(setting, null); - if (value != null) - { - if (setting.IsEncrypted) - { - value = SettingEncryptionService.Decrypt(setting, value); - } - - settingValues[setting.Name] = new SettingValue(setting.Name, value); - } - } - } - - return settingValues.Values.ToList(); - } - public virtual async Task> GetAllAsync(string providerName, string providerKey, bool fallback = true) { Check.NotNull(providerName, nameof(providerName)); diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerExtensions.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerExtensions.cs deleted file mode 100644 index d9f4f3950b..0000000000 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerExtensions.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Threading.Tasks; -using JetBrains.Annotations; - -namespace Volo.Abp.Settings -{ - public static class SettingManagerExtensions - { - public static async Task IsTrueAsync([NotNull] this ISettingManager settingManager, [NotNull] string name) - { - Check.NotNull(settingManager, nameof(settingManager)); - Check.NotNull(name, nameof(name)); - - return string.Equals( - await settingManager.GetOrNullAsync(name), - "true", - StringComparison.OrdinalIgnoreCase - ); - } - - public static async Task GetAsync([NotNull] this ISettingManager settingManager, [NotNull] string name, T defaultValue = default) - where T : struct - { - Check.NotNull(settingManager, nameof(settingManager)); - Check.NotNull(name, nameof(name)); - - var value = await settingManager.GetOrNullAsync(name); - return value?.To() ?? defaultValue; - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerSyncExtensions.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerSyncExtensions.cs deleted file mode 100644 index e5d31bd16c..0000000000 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerSyncExtensions.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using JetBrains.Annotations; -using Volo.Abp.Threading; - -namespace Volo.Abp.Settings -{ - public static class SettingManagerSyncExtensions - { - public static string GetOrNull([NotNull] this ISettingManager settingManager, [NotNull] string name) - { - Check.NotNull(settingManager, nameof(settingManager)); - - return AsyncHelper.RunSync(() => settingManager.GetOrNullAsync(name)); - } - - public static List GetAll([NotNull] this ISettingManager settingManager) - { - Check.NotNull(settingManager, nameof(settingManager)); - - return AsyncHelper.RunSync(settingManager.GetAllAsync); - } - - public static T Get([NotNull] this ISettingManager settingManager, [NotNull] string name, T defaultValue = default) - where T : struct - { - return AsyncHelper.RunSync(() => settingManager.GetAsync(name, defaultValue)); - } - - public static bool IsTrue([NotNull] this ISettingManager settingManager, [NotNull] string name) - { - return AsyncHelper.RunSync(() => settingManager.IsTrueAsync(name)); - } - } -} diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs deleted file mode 100644 index 82231b8318..0000000000 --- a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Threading.Tasks; -using Shouldly; -using Xunit; - -namespace Volo.Abp.Settings -{ - public class SettingManager_Tests : AbpIntegratedTest - { - private readonly ISettingManager _settingManager; - - public SettingManager_Tests() - { - _settingManager = GetRequiredService(); - } - - [Fact] - public async Task Should_Get_Null_If_No_Value_Provided_And_No_Default_Value() - { - (await _settingManager.GetOrNullAsync(TestSettingNames.TestSettingWithoutDefaultValue)) - .ShouldBeNull(); - } - - [Fact] - public async Task Should_Get_Default_Value_If_No_Value_Provided_And_There_Is_A_Default_Value() - { - (await _settingManager.GetOrNullAsync(TestSettingNames.TestSettingWithDefaultValue)) - .ShouldBe("default-value"); - } - - [Theory] - [InlineData(null)] - [InlineData("")] - [InlineData("abc")] - [InlineData("This is a relatively long text... This is a relatively long text... This is a relatively long text... ")] - public async Task Should_Set_And_Get_Encrypted_Values(string plainValue) - { - (await _settingManager.GetOrNullAsync(TestSettingNames.TestSettingEncrypted)) - .ShouldBeNull(); - - await _settingManager.SetAsync( - TestSettingNames.TestSettingEncrypted, - plainValue, - TestSettingValueProvider.ProviderName, - null - ); - - (await _settingManager.GetOrNullAsync(TestSettingNames.TestSettingEncrypted)) - .ShouldBe(plainValue); - } - - //TODO: Needs more tests with more advanced scenarios. - } -} From 091e65194d33ce1674ce89ee02b1a9704e5b9a42 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 11 Feb 2019 15:12:40 +0300 Subject: [PATCH 07/21] #793 cont. --- .../Volo/Abp/Identity/ProfileAppService.cs | 4 +-- .../Abp/Identity/AbpIdentityOptionsFactory.cs | 33 ++++++++++--------- .../Abp/Identity/IdentityOptions_Tests.cs | 5 +-- .../SettingManager_Basic_Tests.cs | 12 ++++--- .../SettingManager_User_Tests.cs | 10 +++--- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs index 5152738794..a47734cd0c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs @@ -28,12 +28,12 @@ namespace Volo.Abp.Identity { var user = await _userManager.GetByIdAsync(CurrentUser.GetId()); - if (await SettingManager.IsTrueAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled)) + if (await SettingProvider.IsTrueAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled)) { (await _userManager.SetUserNameAsync(user, input.UserName)).CheckErrors(); } - if (await SettingManager.IsTrueAsync(IdentitySettingNames.User.IsEmailUpdateEnabled)) + if (await SettingProvider.IsTrueAsync(IdentitySettingNames.User.IsEmailUpdateEnabled)) { (await _userManager.SetEmailAsync(user, input.Email)).CheckErrors(); } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs index 2dce5cdfee..f35f84b027 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs @@ -10,15 +10,15 @@ namespace Volo.Abp.Identity { public class AbpIdentityOptionsFactory : AbpOptionsFactory { - private readonly ISettingManager _settingManager; + private readonly ISettingProvider _settingProvider; public AbpIdentityOptionsFactory( IEnumerable> setups, IEnumerable> postConfigures, - ISettingManager settingManager) + ISettingProvider settingProvider) : base(setups, postConfigures) { - _settingManager = settingManager; + _settingProvider = settingProvider; } public override IdentityOptions Create(string name) @@ -32,19 +32,20 @@ namespace Volo.Abp.Identity protected virtual void OverrideOptions(IdentityOptions options) { - options.Password.RequiredLength = _settingManager.Get(IdentitySettingNames.Password.RequiredLength, options.Password.RequiredLength); - options.Password.RequiredUniqueChars = _settingManager.Get(IdentitySettingNames.Password.RequiredUniqueChars, options.Password.RequiredUniqueChars); - options.Password.RequireNonAlphanumeric = _settingManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric, options.Password.RequireNonAlphanumeric); - options.Password.RequireLowercase = _settingManager.Get(IdentitySettingNames.Password.RequireLowercase, options.Password.RequireLowercase); - options.Password.RequireUppercase = _settingManager.Get(IdentitySettingNames.Password.RequireUppercase, options.Password.RequireUppercase); - options.Password.RequireDigit = _settingManager.Get(IdentitySettingNames.Password.RequireDigit, options.Password.RequireDigit); - - options.Lockout.AllowedForNewUsers = _settingManager.Get(IdentitySettingNames.Lockout.AllowedForNewUsers, options.Lockout.AllowedForNewUsers); - options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromSeconds(_settingManager.Get(IdentitySettingNames.Lockout.LockoutDuration, options.Lockout.DefaultLockoutTimeSpan.TotalSeconds.To())); - options.Lockout.MaxFailedAccessAttempts = _settingManager.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, options.Lockout.MaxFailedAccessAttempts); - - options.SignIn.RequireConfirmedEmail = _settingManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail, options.SignIn.RequireConfirmedEmail); - options.SignIn.RequireConfirmedPhoneNumber = _settingManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, options.SignIn.RequireConfirmedPhoneNumber); + + options.Password.RequiredLength = _settingProvider.Get(IdentitySettingNames.Password.RequiredLength, options.Password.RequiredLength); + options.Password.RequiredUniqueChars = _settingProvider.Get(IdentitySettingNames.Password.RequiredUniqueChars, options.Password.RequiredUniqueChars); + options.Password.RequireNonAlphanumeric = _settingProvider.Get(IdentitySettingNames.Password.RequireNonAlphanumeric, options.Password.RequireNonAlphanumeric); + options.Password.RequireLowercase = _settingProvider.Get(IdentitySettingNames.Password.RequireLowercase, options.Password.RequireLowercase); + options.Password.RequireUppercase = _settingProvider.Get(IdentitySettingNames.Password.RequireUppercase, options.Password.RequireUppercase); + options.Password.RequireDigit = _settingProvider.Get(IdentitySettingNames.Password.RequireDigit, options.Password.RequireDigit); + + options.Lockout.AllowedForNewUsers = _settingProvider.Get(IdentitySettingNames.Lockout.AllowedForNewUsers, options.Lockout.AllowedForNewUsers); + options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromSeconds(_settingProvider.Get(IdentitySettingNames.Lockout.LockoutDuration, options.Lockout.DefaultLockoutTimeSpan.TotalSeconds.To())); + options.Lockout.MaxFailedAccessAttempts = _settingProvider.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, options.Lockout.MaxFailedAccessAttempts); + + options.SignIn.RequireConfirmedEmail = _settingProvider.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail, options.SignIn.RequireConfirmedEmail); + options.SignIn.RequireConfirmedPhoneNumber = _settingProvider.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, options.SignIn.RequireConfirmedPhoneNumber); } } } \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityOptions_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityOptions_Tests.cs index f65ac22021..a4d0294e21 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityOptions_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityOptions_Tests.cs @@ -14,11 +14,12 @@ namespace Volo.Abp.Identity public class IdentityOptions_Tests : AbpIdentityDomainTestBase { private ISettingManager _settingManager; + private ISettingProvider _settingProvider; protected override void AfterAddApplication(IServiceCollection services) { _settingManager = Substitute.For(); - _settingManager.GetOrNullAsync(Arg.Any()).Returns((string) null); + _settingProvider.GetOrNullAsync(Arg.Any()).Returns((string) null); services.Replace(ServiceDescriptor.Singleton(_settingManager)); } @@ -38,7 +39,7 @@ namespace Volo.Abp.Identity options.Password.RequiredUniqueChars.ShouldBe(1); //Default value } - _settingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength).Returns(Task.FromResult("42")); + _settingProvider.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength).Returns(Task.FromResult("42")); using (var scope2 = ServiceProvider.CreateScope()) { diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs index 0e9543cc96..1dafc31570 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs @@ -8,37 +8,39 @@ namespace Volo.Abp.SettingManagement public class SettingManager_Basic_Tests : SettingsTestBase { private readonly ISettingManager _settingManager; + private readonly ISettingProvider _settingProvider; public SettingManager_Basic_Tests() { _settingManager = GetRequiredService(); + _settingProvider = GetRequiredService(); } [Fact] public async Task Should_Throw_Exception_When_Try_To_Get_An_Undefined_Setting() { await Assert.ThrowsAsync( - async () => await _settingManager.GetOrNullAsync("UndefinedSetting") + async () => await _settingProvider.GetOrNullAsync("UndefinedSetting") ); } [Fact] public async Task Should_Get_Default_Value_If_Not_Set_In_Store() { - var value = await _settingManager.GetOrNullAsync("SettingNotSetInStore"); + var value = await _settingProvider.GetOrNullAsync("SettingNotSetInStore"); value.ShouldBe("default-value"); } [Fact] public async Task Should_Get_Base_Store_Value() { - (await _settingManager.GetOrNullAsync("MySetting1")).ShouldBe("42"); + (await _settingProvider.GetOrNullAsync("MySetting1")).ShouldBe("42"); } [Fact] public async Task Should_Get_All_Base_Store_Values() { - var settingValues = await _settingManager.GetAllAsync(); + var settingValues = await _settingProvider.GetAllAsync(); settingValues.ShouldContain(sv => sv.Name == "MySetting1" && sv.Value == "42"); settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "default-store-value"); settingValues.ShouldContain(sv => sv.Name == "SettingNotSetInStore" && sv.Value == "default-value"); @@ -50,7 +52,7 @@ namespace Volo.Abp.SettingManagement await _settingManager.SetGlobalAsync("MySetting1", "43"); (await _settingManager.GetOrNullGlobalAsync("MySetting1")).ShouldBe("43"); - (await _settingManager.GetOrNullAsync("MySetting1")).ShouldBe("43"); + (await _settingProvider.GetOrNullAsync("MySetting1")).ShouldBe("43"); } } } diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs index 90fff7e640..0b9cc288d6 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs @@ -15,11 +15,13 @@ namespace Volo.Abp.SettingManagement private Guid? _currentUserId; private readonly ISettingManager _settingManager; + private readonly ISettingProvider _settingProvider; private readonly SettingTestData _testData; public SettingManager_User_Tests() { _settingManager = GetRequiredService(); + _settingProvider = GetRequiredService(); _testData = GetRequiredService(); } @@ -53,17 +55,17 @@ namespace Volo.Abp.SettingManagement public async Task Should_Get_From_Store_For_Current_User() { _currentUserId = _testData.User1Id; - (await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("user1-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("user1-store-value"); _currentUserId = _testData.User2Id; - (await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("user2-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("user2-store-value"); } [Fact] public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User() { _currentUserId = Guid.NewGuid(); - (await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); } [Fact] @@ -80,7 +82,7 @@ namespace Volo.Abp.SettingManagement public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User_With_GetOrNullForCurrentUserAsync() { _currentUserId = Guid.NewGuid(); - (await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); } [Fact] From caa16b8a1b632f9096e1f6d6eb7cd7cda5017597 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 12 Feb 2019 08:15:51 +0300 Subject: [PATCH 08/21] #793 cont. ACCOUNT MODULE --- .../src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml | 4 ++-- .../src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml index 69268afed3..8c54ce8005 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml @@ -2,7 +2,7 @@ @using Volo.Abp.Account.Web.Settings @model Volo.Abp.Account.Web.Pages.Account.LoginModel @inherits Volo.Abp.Account.Web.Pages.Account.AccountPage -@inject Volo.Abp.Settings.ISettingManager SettingManager +@inject Volo.Abp.Settings.ISettingProvider SettingProvider @if (Model.EnableLocalLogin) {
@@ -29,7 +29,7 @@
- @if (string.Equals(await SettingManager.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled), "true", StringComparison.OrdinalIgnoreCase)) + @if (string.Equals(await SettingProvider.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled), "true", StringComparison.OrdinalIgnoreCase)) { @L["Register"] } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 67a1934eba..d5ffdefd88 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.Account.Web.Pages.Account protected virtual async Task CheckSelfRegistrationAsync() { - if (!await SettingManager.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled)) + if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled)) { throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]); } From 705dcf3a5630c1f4b5d3463db4db59e4b59dfb23 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 12 Feb 2019 10:15:35 +0300 Subject: [PATCH 09/21] Dropdown tag helper improvements --- .../AbpDropdownButtonTagHelperService.cs | 18 ++++++++++++------ .../Dropdown/AbpDropdownTagHelperService.cs | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs index 8b01781602..c21e374442 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs @@ -1,6 +1,7 @@ using System; using System.Text; using System.Text.Encodings.Web; +using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; @@ -22,22 +23,25 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown _serviceProvider = serviceProvider; } - public override void Process(TagHelperContext context, TagHelperOutput output) + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - var buttonsAsHtml = GetButtonsAsHtml(context, output); + var content = await output.GetChildContentAsync(); + + var buttonsAsHtml = GetButtonsAsHtml(context, output, content); output.PreElement.SetHtmlContent(buttonsAsHtml); output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; + output.Content.SetContent(""); output.Attributes.Clear(); } - protected virtual string GetButtonsAsHtml(TagHelperContext context, TagHelperOutput output) + protected virtual string GetButtonsAsHtml(TagHelperContext context, TagHelperOutput output, TagHelperContent content) { var buttonBuilder = new StringBuilder(""); - var mainButton = GetMainButton(context, output); + var mainButton = GetMainButton(context, output, content); buttonBuilder.AppendLine(mainButton); @@ -51,10 +55,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown return buttonBuilder.ToString(); } - protected virtual string GetMainButton(TagHelperContext context, TagHelperOutput output) + protected virtual string GetMainButton(TagHelperContext context, TagHelperOutput output, TagHelperContent content) { var abpButtonTagHelper = _serviceProvider.GetRequiredService(); - + abpButtonTagHelper.Icon = TagHelper.Icon; abpButtonTagHelper.Text = TagHelper.Text; abpButtonTagHelper.IconType = TagHelper.IconType; @@ -64,6 +68,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown var buttonTag = GetInnerTagHelper(attributes, context, abpButtonTagHelper, "button", TagMode.StartTagAndEndTag); + buttonTag.PreContent.SetHtmlContent(content.GetContent()); + if ((TagHelper.NavLink ?? false) || (TagHelper.Link ?? false)) { var linkTag = ConvertButtonToLink(buttonTag); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownTagHelperService.cs index 945221ff2d..8f37fca5ee 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownTagHelperService.cs @@ -8,6 +8,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; + output.Attributes.AddClass("dropdown"); output.Attributes.AddClass("btn-group"); SetDirection(context, output); From c8538ae63c93ba0ee6dbf38fe96ff19b4e75f8c4 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Tue, 12 Feb 2019 13:52:04 +0300 Subject: [PATCH 10/21] Resolved #793: separate setting management from obtaining setting values. --- .../Volo.Abp.Ddd.Application.csproj | 1 + .../Application/AbpDddApplicationModule.cs | 17 ++-- .../Volo.Abp.MultiTenancy.Abstractions.csproj | 1 - .../AbpMultiTenancyAbstractionsModule.cs | 12 +-- .../TenantSettingValueProvider.cs | 45 ---------- .../Volo.Abp.Settings.csproj | 1 + .../Volo/Abp/Settings/AbpSettingsModule.cs | 16 +++- .../DefaultValueSettingValueProvider.cs | 14 +-- .../Settings/GlobalSettingValueProvider.cs | 12 +-- .../Volo/Abp/Settings/ISettingStore.cs | 15 ++-- .../Abp/Settings/ISettingValueProvider.cs | 8 +- .../Volo/Abp/Settings/SettingOptions.cs | 6 +- .../Volo/Abp/Settings/SettingProvider.cs | 7 +- .../Volo/Abp/Settings/SettingValueProvider.cs | 6 +- .../Settings/TenantSettingValueProvider.cs | 25 ++++++ .../Abp/Settings/UserSettingValueProvider.cs | 30 +++++++ .../Abp/Settings/TestSettingValueProvider.cs | 14 +-- .../IPermissionManagementProvider.cs | 2 +- .../PermissionManagementOptions.cs | 1 + .../AbpSettingManagementDomainModule.cs | 11 ++- .../DefaultValueSettingManagementProvider.cs | 26 ++++++ .../DefaultValueSettingManagerExtensions.cs | 20 +++++ .../GlobalSettingManagementProvider.cs | 21 +++++ .../GlobalSettingManagerExtensions.cs | 3 +- .../ISettingManagementProvider.cs | 17 ++++ .../ISettingManagementStore.cs | 17 ++++ .../Abp/SettingManagement}/ISettingManager.cs | 3 +- .../SettingManagementOptions.cs | 14 +++ .../SettingManagementProvider.cs | 37 ++++++++ .../SettingManagementStore.cs | 90 +++++++++++++++++++ .../Abp/SettingManagement}/SettingManager.cs | 68 +++++++------- .../TenantSettingManagementProvider.cs | 31 +++++++ .../TenantSettingManagerExtensions.cs | 4 +- .../UserSettingManagementProvider.cs | 31 +++++++ .../UserSettingManagerExtensions.cs | 3 +- .../SettingTestDataBuilder.cs | 12 +-- .../SettingManager_User_Tests.cs | 10 +-- .../Abp/Users/AbpUsersAbstractionModule.cs | 8 +- .../Abp/Users/UserSettingValueProvider.cs | 48 ---------- 39 files changed, 471 insertions(+), 236 deletions(-) delete mode 100644 framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagerExtensions.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagementProvider.cs rename {framework/src/Volo.Abp.Settings/Volo/Abp/Settings => modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement}/GlobalSettingManagerExtensions.cs (93%) create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementProvider.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementStore.cs rename {framework/src/Volo.Abp.Settings/Volo/Abp/Settings => modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement}/ISettingManager.cs (90%) create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementOptions.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs rename {framework/src/Volo.Abp.Settings/Volo/Abp/Settings => modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement}/SettingManager.cs (81%) create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagementProvider.cs rename {framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings => modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement}/TenantSettingManagerExtensions.cs (96%) create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagementProvider.cs rename modules/{users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Settings => setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement}/UserSettingManagerExtensions.cs (96%) delete mode 100644 modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserSettingValueProvider.cs diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj index 9a9ce24d6d..57f909667b 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj +++ b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj @@ -20,6 +20,7 @@ + diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs index 838050c067..84b609b99f 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Application.Services; using Volo.Abp.Authorization; using Volo.Abp.Domain; @@ -8,17 +7,21 @@ using Volo.Abp.Http.Modeling; using Volo.Abp.Modularity; using Volo.Abp.ObjectMapping; using Volo.Abp.Security; +using Volo.Abp.Settings; using Volo.Abp.Uow; using Volo.Abp.Validation; namespace Volo.Abp.Application { - [DependsOn(typeof(AbpDddDomainModule))] - [DependsOn(typeof(AbpSecurityModule))] - [DependsOn(typeof(AbpObjectMappingModule))] - [DependsOn(typeof(AbpValidationModule))] - [DependsOn(typeof(AbpAuthorizationModule))] - [DependsOn(typeof(AbpHttpAbstractionsModule))] + [DependsOn( + typeof(AbpDddDomainModule), + typeof(AbpSecurityModule), + typeof(AbpObjectMappingModule), + typeof(AbpValidationModule), + typeof(AbpAuthorizationModule), + typeof(AbpHttpAbstractionsModule), + typeof(AbpSettingsModule) + )] public class AbpDddApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj index d4aab94125..05291caa45 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj @@ -17,7 +17,6 @@ - diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs index c695a84664..58de6cdb99 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs @@ -1,21 +1,13 @@ using Volo.Abp.Data; using Volo.Abp.Modularity; -using Volo.Abp.Settings; namespace Volo.Abp.MultiTenancy { [DependsOn( - typeof(AbpDataModule), - typeof(AbpSettingsModule) + typeof(AbpDataModule) )] public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule? { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.ValueProviders.Add(); - }); - } + } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs deleted file mode 100644 index 542af56fe2..0000000000 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Settings; - -namespace Volo.Abp.MultiTenancy -{ - public class TenantSettingValueProvider : SettingValueProvider - { - public const string ProviderName = "Tenant"; - - public override string Name => ProviderName; - - protected ICurrentTenant CurrentTenant { get; } - - public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant) - : base(settingStore) - { - CurrentTenant = currentTenant; - } - - public override async Task GetOrNullAsync(SettingDefinition setting, string providerKey) - { - return await SettingStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - return SettingStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)); - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - return SettingStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - private string NormalizeProviderKey(string providerKey) - { - if (providerKey == null && CurrentTenant.Id.HasValue) - { - return CurrentTenant.Id.Value.ToString(); - } - - return providerKey; - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj index 42ab46d477..b7e3530ba0 100644 --- a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj +++ b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj @@ -15,6 +15,7 @@ + diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs index da871946ae..8c711e12c2 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs @@ -1,15 +1,27 @@ using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.Security; +using Volo.Abp.Users; namespace Volo.Abp.Settings { [DependsOn( typeof(AbpLocalizationAbstractionsModule), - typeof(AbpSecurityModule) + typeof(AbpSecurityModule), + typeof(AbpMultiTenancyAbstractionsModule) )] public class AbpSettingsModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.ValueProviders.Add(); + options.ValueProviders.Add(); + options.ValueProviders.Add(); + options.ValueProviders.Add(); + }); + } } } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs index 4a3bb7a29a..f6e1229cee 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs @@ -14,21 +14,9 @@ namespace Volo.Abp.Settings } - public override Task GetOrNullAsync(SettingDefinition setting, string providerKey) + public override Task GetOrNullAsync(SettingDefinition setting) { return Task.FromResult(setting.DefaultValue); } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - setting.DefaultValue = value; - return Task.CompletedTask; - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - setting.DefaultValue = null; - return Task.CompletedTask; - } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs index 78a38cc703..c8d2e38542 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs @@ -13,19 +13,9 @@ namespace Volo.Abp.Settings { } - public override Task GetOrNullAsync(SettingDefinition setting, string providerKey) + public override Task GetOrNullAsync(SettingDefinition setting) { return SettingStore.GetOrNullAsync(setting.Name, Name, null); } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - return SettingStore.SetAsync(setting.Name, value, Name, null); - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - return SettingStore.DeleteAsync(setting.Name, Name, null); - } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs index 40ee68f462..69e6319a2f 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs @@ -1,17 +1,14 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; using JetBrains.Annotations; namespace Volo.Abp.Settings { public interface ISettingStore { - Task GetOrNullAsync([NotNull] string name, [CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task SetAsync([NotNull] string name, [NotNull] string value, [CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task> GetListAsync([CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task DeleteAsync([NotNull] string name, [CanBeNull]string providerName, [CanBeNull]string providerKey); + Task GetOrNullAsync( + [NotNull] string name, + [CanBeNull] string providerName, + [CanBeNull] string providerKey + ); } } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs index 3063a7cb15..ab63f47d17 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs @@ -7,12 +7,6 @@ namespace Volo.Abp.Settings { string Name { get; } - //TODO: There is a bug here, because we are checking the same providerKey in all providers in a fallback system! - - Task GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); - - Task SetAsync([NotNull] SettingDefinition setting, [NotNull] string value, [CanBeNull] string providerKey); - - Task ClearAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); + Task GetOrNullAsync([NotNull] SettingDefinition setting); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs index 66b4fa6c05..d916f1a95d 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs @@ -11,11 +11,7 @@ namespace Volo.Abp.Settings public SettingOptions() { DefinitionProviders = new TypeList(); - ValueProviders = new TypeList - { - typeof(DefaultValueSettingValueProvider), - typeof(GlobalSettingValueProvider) - }; + ValueProviders = new TypeList(); } } } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs index b826a72e49..63abadae12 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.Settings //TODO: How to implement setting.IsInherited? - var value = await GetOrNullValueFromProvidersAsync(null, providers, setting); + var value = await GetOrNullValueFromProvidersAsync(providers, setting); if (setting.IsEncrypted) { value = SettingEncryptionService.Decrypt(setting, value); @@ -66,7 +66,7 @@ namespace Volo.Abp.Settings { foreach (var setting in settingDefinitions) { - var value = await provider.GetOrNullAsync(setting, null); + var value = await provider.GetOrNullAsync(setting); if (value != null) { if (setting.IsEncrypted) @@ -83,13 +83,12 @@ namespace Volo.Abp.Settings } protected virtual async Task GetOrNullValueFromProvidersAsync( - string providerKey, IEnumerable providers, SettingDefinition setting) { foreach (var provider in providers) { - var value = await provider.GetOrNullAsync(setting, providerKey); + var value = await provider.GetOrNullAsync(setting); if (value != null) { return value; diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs index dcd98945e4..5173f80540 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs @@ -14,10 +14,6 @@ namespace Volo.Abp.Settings SettingStore = settingStore; } - public abstract Task GetOrNullAsync(SettingDefinition setting, string providerKey); - - public abstract Task SetAsync(SettingDefinition setting, string value, string providerKey); - - public abstract Task ClearAsync(SettingDefinition setting, string providerKey); + public abstract Task GetOrNullAsync(SettingDefinition setting); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs new file mode 100644 index 0000000000..7d8177a8e9 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs @@ -0,0 +1,25 @@ +using System.Threading.Tasks; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Settings +{ + public class TenantSettingValueProvider : SettingValueProvider + { + public const string ProviderName = "Tenant"; + + public override string Name => ProviderName; + + protected ICurrentTenant CurrentTenant { get; } + + public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant) + : base(settingStore) + { + CurrentTenant = currentTenant; + } + + public override async Task GetOrNullAsync(SettingDefinition setting) + { + return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString()); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs new file mode 100644 index 0000000000..4a98dcee62 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using Volo.Abp.Users; + +namespace Volo.Abp.Settings +{ + public class UserSettingValueProvider : SettingValueProvider + { + public const string ProviderName = "User"; + + public override string Name => ProviderName; + + protected ICurrentUser CurrentUser { get; } + + public UserSettingValueProvider(ISettingStore settingStore, ICurrentUser currentUser) + : base(settingStore) + { + CurrentUser = currentUser; + } + + public override async Task GetOrNullAsync(SettingDefinition setting) + { + if (CurrentUser.Id == null) + { + return null; + } + + return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString()); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs index e8f5cbc559..2dbe1e5729 100644 --- a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs +++ b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs @@ -17,21 +17,9 @@ namespace Volo.Abp.Settings _values = new Dictionary(); } - public Task GetOrNullAsync(SettingDefinition setting, string providerKey) + public Task GetOrNullAsync(SettingDefinition setting) { return Task.FromResult(_values.GetOrDefault(setting.Name)); } - - public Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - _values[setting.Name] = value; - return Task.CompletedTask; - } - - public Task ClearAsync(SettingDefinition setting, string providerKey) - { - _values.Remove(setting.Name); - return Task.CompletedTask; - } } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs index b765b1360a..9ee60b0a93 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs @@ -5,7 +5,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.PermissionManagement { - public interface IPermissionManagementProvider : ISingletonDependency + public interface IPermissionManagementProvider : ISingletonDependency //TODO: Consider to remove this pre-assumption { string Name { get; } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs index 2e29ab9c29..674f5daa88 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs @@ -5,6 +5,7 @@ namespace Volo.Abp.PermissionManagement { public class PermissionManagementOptions { + //TODO: rename to Providers public ITypeList ManagementProviders { get; } public Dictionary ProviderPolicies { get; } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs index 0ddc49b076..237b226b07 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs @@ -13,6 +13,15 @@ namespace Volo.Abp.SettingManagement )] public class AbpSettingManagementDomainModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Providers.Add(); + options.Providers.Add(); + options.Providers.Add(); + options.Providers.Add(); + }); + } } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs new file mode 100644 index 0000000000..3bb4ae2655 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class DefaultValueSettingManagementProvider : ISettingManagementProvider, ISingletonDependency + { + public string Name => DefaultValueSettingValueProvider.ProviderName; + + public Task GetOrNullAsync(SettingDefinition setting, string providerKey) + { + return Task.FromResult(setting.DefaultValue); + } + + public Task SetAsync(SettingDefinition setting, string value, string providerKey) + { + throw new AbpException($"Can not set default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation."); + } + + public Task ClearAsync(SettingDefinition setting, string providerKey) + { + throw new AbpException($"Can not clear default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation."); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagerExtensions.cs new file mode 100644 index 0000000000..20ad176ecc --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagerExtensions.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public static class DefaultValueSettingManagerExtensions + { + public static Task GetOrNullDefaultAsync(this ISettingManager settingManager, [NotNull] string name, bool fallback = true) + { + return settingManager.GetOrNullAsync(name, DefaultValueSettingValueProvider.ProviderName, null, fallback); + } + + public static Task> GetAllDefaultAsync(this ISettingManager settingManager, bool fallback = true) + { + return settingManager.GetAllAsync(DefaultValueSettingValueProvider.ProviderName, null, fallback); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagementProvider.cs new file mode 100644 index 0000000000..85201eb39a --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagementProvider.cs @@ -0,0 +1,21 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class GlobalSettingManagementProvider : SettingManagementProvider, ITransientDependency + { + public override string Name => GlobalSettingValueProvider.ProviderName; + + public GlobalSettingManagementProvider(ISettingManagementStore settingManagementStore) + : base(settingManagementStore) + { + + } + + protected override string NormalizeProviderKey(string providerKey) + { + return null; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagerExtensions.cs similarity index 93% rename from framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagerExtensions.cs index d5dabccfe8..e403eb41a3 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagerExtensions.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public static class GlobalSettingManagerExtensions { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementProvider.cs new file mode 100644 index 0000000000..827b0ff851 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementProvider.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public interface ISettingManagementProvider + { + string Name { get; } + + Task GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); + + Task SetAsync([NotNull] SettingDefinition setting, [NotNull] string value, [CanBeNull] string providerKey); + + Task ClearAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementStore.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementStore.cs new file mode 100644 index 0000000000..eebdc69357 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementStore.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public interface ISettingManagementStore + { + Task GetOrNullAsync(string name, string providerName, string providerKey); + + Task> GetListAsync(string providerName, string providerKey); + + Task SetAsync(string name, string value, string providerName, string providerKey); + + Task DeleteAsync(string name, string providerName, string providerKey); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs similarity index 90% rename from framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs index bd0b5c7d20..77ae59e664 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public interface ISettingManager { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementOptions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementOptions.cs new file mode 100644 index 0000000000..06ced8e8a8 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementOptions.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Collections; + +namespace Volo.Abp.SettingManagement +{ + public class SettingManagementOptions + { + public ITypeList Providers { get; } + + public SettingManagementOptions() + { + Providers = new TypeList(); + } + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs new file mode 100644 index 0000000000..d350cc28d7 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs @@ -0,0 +1,37 @@ +using System.Threading.Tasks; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public abstract class SettingManagementProvider : ISettingManagementProvider + { + public abstract string Name { get; } + + protected ISettingManagementStore SettingManagementStore { get; } + + protected SettingManagementProvider(ISettingManagementStore settingManagementStore) + { + SettingManagementStore = settingManagementStore; + } + + public async Task GetOrNullAsync(SettingDefinition setting, string providerKey) + { + return await SettingManagementStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); + } + + public virtual async Task SetAsync(SettingDefinition setting, string value, string providerKey) + { + await SettingManagementStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)); + } + + public virtual async Task ClearAsync(SettingDefinition setting, string providerKey) + { + await SettingManagementStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); + } + + protected virtual string NormalizeProviderKey(string providerKey) + { + return providerKey; + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs new file mode 100644 index 0000000000..8c9cfc8684 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class SettingManagementStore : ISettingManagementStore, ITransientDependency + { + protected IDistributedCache Cache { get; } + protected ISettingRepository SettingRepository { get; } + protected IGuidGenerator GuidGenerator { get; } + + public SettingManagementStore( + ISettingRepository settingRepository, + IGuidGenerator guidGenerator, + IDistributedCache cache) + { + SettingRepository = settingRepository; + GuidGenerator = guidGenerator; + Cache = cache; + } + + public async Task GetOrNullAsync(string name, string providerName, string providerKey) + { + var cacheItem = await GetCacheItemAsync(name, providerName, providerKey); + return cacheItem.Value; + } + + public async Task SetAsync(string name, string value, string providerName, string providerKey) + { + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); + if (setting == null) + { + setting = new Setting(GuidGenerator.Create(), name, value, providerName, providerKey); + await SettingRepository.InsertAsync(setting); + } + else + { + setting.Value = value; + await SettingRepository.UpdateAsync(setting); + } + } + + public async Task> GetListAsync(string providerName, string providerKey) + { + var settings = await SettingRepository.GetListAsync(providerName, providerKey); + return settings.Select(s => new SettingValue(s.Name, s.Value)).ToList(); + } + + public async Task DeleteAsync(string name, string providerName, string providerKey) + { + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); + if (setting != null) + { + await SettingRepository.DeleteAsync(setting); + } + } + + protected virtual async Task GetCacheItemAsync(string name, string providerName, string providerKey) + { + var cacheKey = CalculateCacheKey(name, providerName, providerKey); + var cacheItem = await Cache.GetAsync(cacheKey); + + if (cacheItem != null) + { + return cacheItem; + } + + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); + + cacheItem = new SettingCacheItem(setting?.Value); + + await Cache.SetAsync( + cacheKey, + cacheItem + ); + + return cacheItem; + } + + protected virtual string CalculateCacheKey(string name, string providerName, string providerKey) + { + return SettingCacheItem.CalculateCacheKey(name, providerName, providerKey); + } + } +} diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs similarity index 81% rename from framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs index fffa1021a9..cfb4cccbe3 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs @@ -5,18 +5,20 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public class SettingManager : ISettingManager, ISingletonDependency { protected ISettingDefinitionManager SettingDefinitionManager { get; } protected ISettingEncryptionService SettingEncryptionService { get; } - protected Lazy> Providers { get; } - protected SettingOptions Options { get; } + protected List Providers => _lazyProviders.Value; + protected SettingManagementOptions Options { get; } + private readonly Lazy> _lazyProviders; public SettingManager( - IOptions options, + IOptions options, IServiceProvider serviceProvider, ISettingDefinitionManager settingDefinitionManager, ISettingEncryptionService settingEncryptionService) @@ -25,10 +27,12 @@ namespace Volo.Abp.Settings SettingEncryptionService = settingEncryptionService; Options = options.Value; - Providers = new Lazy>( + //TODO: Instead, use IHybridServiceScopeFactory and create a scope..? + + _lazyProviders = new Lazy>( () => Options - .ValueProviders - .Select(c => serviceProvider.GetRequiredService(c) as ISettingValueProvider) + .Providers + .Select(c => serviceProvider.GetRequiredService(c) as ISettingManagementProvider) .ToList(), true ); @@ -47,7 +51,7 @@ namespace Volo.Abp.Settings Check.NotNull(providerName, nameof(providerName)); var settingDefinitions = SettingDefinitionManager.GetAll(); - var providers = Enumerable.Reverse(Providers.Value) + var providers = Enumerable.Reverse(Providers) .SkipWhile(c => c.Name != providerName); if (!fallback) @@ -72,7 +76,10 @@ namespace Volo.Abp.Settings { foreach (var provider in providerList) { - var providerValue = await provider.GetOrNullAsync(setting, providerKey); + var providerValue = await provider.GetOrNullAsync( + setting, + provider.Name == providerName ? providerKey : null + ); if (providerValue != null) { value = providerValue; @@ -81,7 +88,10 @@ namespace Volo.Abp.Settings } else { - value = await providerList[0].GetOrNullAsync(setting, providerKey); + value = await providerList[0].GetOrNullAsync( + setting, + providerKey + ); } if (setting.IsEncrypted) @@ -106,7 +116,7 @@ namespace Volo.Abp.Settings var setting = SettingDefinitionManager.Get(name); var providers = Enumerable - .Reverse(Providers.Value) + .Reverse(Providers) .SkipWhile(p => p.Name != providerName) .ToList(); @@ -122,10 +132,10 @@ namespace Volo.Abp.Settings if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null) { - //Clear the value if it's same as it's fallback value - var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, providerKey); + var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null); if (fallbackValue == value) { + //Clear the value if it's same as it's fallback value value = null; } } @@ -154,7 +164,7 @@ namespace Volo.Abp.Settings { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable - .Reverse(Providers.Value); + .Reverse(Providers); if (providerName != null) { @@ -166,30 +176,26 @@ namespace Volo.Abp.Settings providers = providers.TakeWhile(c => c.Name == providerName); } - var value = await GetOrNullValueFromProvidersAsync(providerKey, providers, setting); - if (setting.IsEncrypted) - { - value = SettingEncryptionService.Decrypt(setting, value); - } - - return value; - } - - protected virtual async Task GetOrNullValueFromProvidersAsync( - string providerKey, - IEnumerable providers, - SettingDefinition setting) - { + string value = null; foreach (var provider in providers) { - var value = await provider.GetOrNullAsync(setting, providerKey); + value = await provider.GetOrNullAsync( + setting, + provider.Name == providerName ? providerKey : null + ); + if (value != null) { - return value; + break; } } - return null; + if (setting.IsEncrypted) + { + value = SettingEncryptionService.Decrypt(setting, value); + } + + return value; } } } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagementProvider.cs new file mode 100644 index 0000000000..947e2d8799 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagementProvider.cs @@ -0,0 +1,31 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class TenantSettingManagementProvider : SettingManagementProvider, ITransientDependency + { + public override string Name => TenantSettingValueProvider.ProviderName; + + protected ICurrentTenant CurrentTenant { get; } + + public TenantSettingManagementProvider( + ISettingManagementStore settingManagementStore, + ICurrentTenant currentTenant) + : base(settingManagementStore) + { + CurrentTenant = currentTenant; + } + + protected override string NormalizeProviderKey(string providerKey) + { + if (providerKey != null) + { + return providerKey; + } + + return CurrentTenant.Id?.ToString(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs similarity index 96% rename from framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs index f3500bf80a..f5cc345931 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; -using Volo.Abp.MultiTenancy; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public static class TenantSettingManagerExtensions { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagementProvider.cs new file mode 100644 index 0000000000..790e0eaa0c --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagementProvider.cs @@ -0,0 +1,31 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; +using Volo.Abp.Users; + +namespace Volo.Abp.SettingManagement +{ + public class UserSettingManagementProvider : SettingManagementProvider, ITransientDependency + { + public override string Name => UserSettingValueProvider.ProviderName; + + protected ICurrentUser CurrentUser { get; } + + public UserSettingManagementProvider( + ISettingManagementStore settingManagementStore, + ICurrentUser currentUser) + : base(settingManagementStore) + { + CurrentUser = currentUser; + } + + protected override string NormalizeProviderKey(string providerKey) + { + if (providerKey != null) + { + return providerKey; + } + + return CurrentUser.Id?.ToString(); + } + } +} \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Settings/UserSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagerExtensions.cs similarity index 96% rename from modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Settings/UserSettingManagerExtensions.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagerExtensions.cs index 4e3a1dd574..2b58382463 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Settings/UserSettingManagerExtensions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagerExtensions.cs @@ -2,9 +2,10 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; +using Volo.Abp.Settings; using Volo.Abp.Users; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { //TODO: Consider to move to another package? diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs index ce0a71b6db..79ae4702c8 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.SettingManagement public void Build() { - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting1", @@ -31,7 +31,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting2", @@ -40,7 +40,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting2", @@ -50,7 +50,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting2", @@ -60,7 +60,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySettingWithoutInherit", @@ -69,7 +69,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySettingWithoutInherit", diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs index 0b9cc288d6..4b42572f0a 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs @@ -1,16 +1,16 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using NSubstitute; using Shouldly; +using System; +using System.Linq; +using System.Threading.Tasks; using Volo.Abp.Settings; using Volo.Abp.Users; using Xunit; namespace Volo.Abp.SettingManagement { - public class SettingManager_User_Tests: SettingsTestBase + public class SettingManager_User_Tests : SettingsTestBase { private Guid? _currentUserId; diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs index f27813e04b..2c482606eb 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs +++ b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs @@ -14,12 +14,6 @@ namespace Volo.Abp.Users )] public class AbpUsersAbstractionModule : AbpModule { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.ValueProviders.Add(); - }); - } + } } diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserSettingValueProvider.cs b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserSettingValueProvider.cs deleted file mode 100644 index 345b0e6929..0000000000 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserSettingValueProvider.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Settings; - -namespace Volo.Abp.Users -{ - //TODO: Optimization: Get all settings and cache it! - //TODO: Think if it's true to have this provider in this project? - - public class UserSettingValueProvider : SettingValueProvider - { - public const string ProviderName = "User"; - - public override string Name => ProviderName; - - protected ICurrentUser CurrentUser { get; } - - public UserSettingValueProvider(ISettingStore settingStore, ICurrentUser currentUser) - : base(settingStore) - { - CurrentUser = currentUser; - } - - public override async Task GetOrNullAsync(SettingDefinition setting, string providerKey) - { - return await SettingStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - return SettingStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)); - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - return SettingStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - private string NormalizeProviderKey(string providerKey) - { - if (providerKey == null && CurrentUser.Id.HasValue) - { - return CurrentUser.Id.Value.ToString(); - } - - return providerKey; - } - } -} \ No newline at end of file From 1539b2336c6a7a1b2265ae0301df1c97d2f15b25 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Tue, 12 Feb 2019 13:55:48 +0300 Subject: [PATCH 11/21] Remove AbpSettingsModule dependency --- .../Volo/Abp/Users/AbpUsersAbstractionModule.cs | 4 +--- .../Volo/Abp/Users/AbpUsersDomainModule.cs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs index 2c482606eb..eac254b2a9 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs +++ b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs @@ -1,8 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.EventBus; +using Volo.Abp.EventBus; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; -using Volo.Abp.Settings; namespace Volo.Abp.Users { diff --git a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/AbpUsersDomainModule.cs b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/AbpUsersDomainModule.cs index fe3979df02..d3d6a01185 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/AbpUsersDomainModule.cs +++ b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/AbpUsersDomainModule.cs @@ -1,14 +1,12 @@ using Volo.Abp.Modularity; using Volo.Abp.Security; -using Volo.Abp.Settings; namespace Volo.Abp.Users { [DependsOn( typeof(AbpUsersDomainSharedModule), typeof(AbpUsersAbstractionModule), - typeof(AbpSecurityModule), - typeof(AbpSettingsModule) + typeof(AbpSecurityModule) )] public class AbpUsersDomainModule : AbpModule { From 805e16de3a404bff97399d1acfd8d8c7ac96f5d4 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Tue, 12 Feb 2019 14:26:36 +0300 Subject: [PATCH 12/21] Implemented RemoteSettingProvider --- .../Mvc/Client/RemoteSettingProvider.cs | 33 +++++++++++++++++ .../ApplicationConfigurationDto.cs | 2 + .../ApplicationSettingConfigurationDto.cs | 11 ++++++ .../AbpApplicationConfigurationAppService.cs | 37 +++++++++++++++++-- .../Abp/Settings/ISettingDefinitionManager.cs | 2 + 5 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationSettingConfigurationDto.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs new file mode 100644 index 0000000000..db3ea6e9a6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; + +namespace Volo.Abp.AspNetCore.Mvc.Client +{ + public class RemoteSettingProvider : ISettingProvider, ITransientDependency + { + protected ICachedApplicationConfigurationClient ConfigurationClient { get; } + + public RemoteSettingProvider(ICachedApplicationConfigurationClient configurationClient) + { + ConfigurationClient = configurationClient; + } + + public async Task GetOrNullAsync(string name) + { + var configuration = await ConfigurationClient.GetAsync(); + return configuration.Setting.Values.GetOrDefault(name); + } + + public async Task> GetAllAsync() + { + var configuration = await ConfigurationClient.GetAsync(); + return configuration + .Setting.Values + .Select(s => new SettingValue(s.Key, s.Value)) + .ToList(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs index ecafcb3274..6f41399c29 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs @@ -9,6 +9,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations public ApplicationAuthConfigurationDto Auth { get; set; } + public ApplicationSettingConfigurationDto Setting { get; set; } + public CurrentUserDto CurrentUser { get; set; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationSettingConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationSettingConfigurationDto.cs new file mode 100644 index 0000000000..40cbd89fd1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationSettingConfigurationDto.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations +{ + [Serializable] + public class ApplicationSettingConfigurationDto + { + public Dictionary Values { get; set; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index a91cdebc35..086fbf1d72 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -4,10 +4,12 @@ using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Authorization; using Volo.Abp.Localization; +using Volo.Abp.Settings; using Volo.Abp.Users; namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations @@ -19,18 +21,24 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations private readonly IAbpAuthorizationPolicyProvider _abpAuthorizationPolicyProvider; private readonly IAuthorizationService _authorizationService; private readonly ICurrentUser _currentUser; + private readonly ISettingProvider _settingProvider; + private readonly ISettingDefinitionManager _settingDefinitionManager; public AbpApplicationConfigurationAppService( IOptions localizationOptions, IServiceProvider serviceProvider, IAbpAuthorizationPolicyProvider abpAuthorizationPolicyProvider, IAuthorizationService authorizationService, - ICurrentUser currentUser) + ICurrentUser currentUser, + ISettingProvider settingProvider, + SettingDefinitionManager settingDefinitionManager) { _serviceProvider = serviceProvider; _abpAuthorizationPolicyProvider = abpAuthorizationPolicyProvider; _authorizationService = authorizationService; _currentUser = currentUser; + _settingProvider = settingProvider; + _settingDefinitionManager = settingDefinitionManager; _localizationOptions = localizationOptions.Value; } @@ -40,9 +48,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations return new ApplicationConfigurationDto { - Auth = await GetAuthConfig(), + Auth = await GetAuthConfigAsync(), Localization = GetLocalizationConfig(), - CurrentUser = GetCurrentUser() + CurrentUser = GetCurrentUser(), + Setting = await GetSettingConfigAsync() }; } @@ -57,7 +66,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations }; } - protected virtual async Task GetAuthConfig() + protected virtual async Task GetAuthConfigAsync() { var authConfig = new ApplicationAuthConfigurationDto(); @@ -97,5 +106,25 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations return localizationConfig; } + + private async Task GetSettingConfigAsync() + { + var result = new ApplicationSettingConfigurationDto + { + Values = new Dictionary() + }; + + foreach (var settingDefinition in _settingDefinitionManager.GetAll()) + { + if (!settingDefinition.IsVisibleToClients) + { + continue; + } + + result.Values[settingDefinition.Name] = await _settingProvider.GetOrNullAsync(settingDefinition.Name); + } + + return result; + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs index 176f5b314c..3ff30c575a 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs @@ -9,5 +9,7 @@ namespace Volo.Abp.Settings SettingDefinition Get([NotNull] string name); IReadOnlyList GetAll(); + + SettingDefinition GetOrNull(string name); } } \ No newline at end of file From f1dc2e5c84be4e1c347c5b4df4e4b5f44a794154 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Tue, 12 Feb 2019 14:28:57 +0300 Subject: [PATCH 13/21] Added setting js API --- npm/packs/core/src/abp.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/npm/packs/core/src/abp.js b/npm/packs/core/src/abp.js index 4c87489e22..7e44e6256e 100644 --- a/npm/packs/core/src/abp.js +++ b/npm/packs/core/src/abp.js @@ -161,6 +161,25 @@ var abp = abp || {}; abp.auth.setToken(); } + /* SETTINGS *************************************************/ + + abp.setting = abp.setting || {}; + + abp.setting.values = abp.setting.values || {}; + + abp.setting.get = function (name) { + return abp.setting.values[name]; + }; + + abp.setting.getBoolean = function (name) { + var value = abp.setting.get(name); + return value == 'true' || value == 'True'; + }; + + abp.setting.getInt = function (name) { + return parseInt(abp.setting.values[name]); + }; + /* NOTIFICATION *********************************************/ //Defines Notification API, not implements it From 1e18a96378fdd3f1cf94e844960ec6b151018f10 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 12 Feb 2019 14:43:03 +0300 Subject: [PATCH 14/21] Tag helpers now use custom-controls --- .../TagHelpers/Form/AbpInputTagHelperService.cs | 13 +++++++------ .../TagHelpers/Form/AbpSelectTagHelperService.cs | 8 +++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index bc48d7b1d8..e90120f517 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -45,7 +45,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form output.TagMode = TagMode.StartTagAndEndTag; output.TagName = "div"; LeaveOnlyGroupAttributes(context, output); - output.Attributes.AddClass(isCheckbox ? "form-check" : "form-group"); + output.Attributes.AddClass(isCheckbox ? "custom-checkbox" : "form-group"); + output.Attributes.AddClass(isCheckbox ? "custom-control" : ""); output.Attributes.AddClass(isCheckbox ? "mb-2" : ""); output.Content.SetHtmlContent(output.Content.GetContent() + innerHtml); } @@ -54,7 +55,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual string GetFormInputGroupAsHtml(TagHelperContext context, TagHelperOutput output, out bool isCheckbox) { var inputTag = GetInputTagHelperOutput(context, output, out isCheckbox); - + var inputHtml = RenderTagHelperOutput(inputTag, _encoder); var label = GetLabelAsHtml(context, output, inputTag, isCheckbox); var info = GetInfoAsHtml(context, output, inputTag, isCheckbox); @@ -92,7 +93,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual string SurroundInnerHtmlAndGet(TagHelperContext context, TagHelperOutput output, string innerHtml, bool isCheckbox) { - return "
" + + return "
" + Environment.NewLine + innerHtml + Environment.NewLine + "
"; } @@ -141,7 +142,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form if (isCheckbox) { - className = "form-check-input"; + className = "custom-control-input"; } inputTagHelperOutput.Attributes.AddClass(className + " " + GetSize(context, output)); @@ -226,7 +227,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return GetLabelAsHtmlUsingTagHelper(context, output, isCheckbox) + GetRequiredSymbol(context, output, inputTag); } - var checkboxClass = isCheckbox ? "class=\"form-check-label\" " : ""; + var checkboxClass = isCheckbox ? "class=\"custom-control-label\" " : ""; return "