From 5ede5aac7460c58d9e0585e7f5d7c28e65e115b2 Mon Sep 17 00:00:00 2001 From: David Jimenez Barrantes Date: Mon, 23 Dec 2024 16:01:44 -0600 Subject: [PATCH] [AC-113] - Creates Admin Console ClaimSet. (#204) * Creates Admin Console ClaimSet. --- .../EdFi.Ods.AdminApi.AdminConsole.csproj | 9 +- .../20241113011439_InitialMigrate.Designer.cs | 2 +- .../MsSql/20241113011439_InitialMigrate.cs | 0 .../20241113205103_StepTable.Designer.cs | 2 +- .../MsSql/20241113205103_StepTable.cs | 0 ...1212040410_UpdateInstancaModel.Designer.cs | 2 +- .../20241212040410_UpdateInstancaModel.cs | 0 .../AdminConsoleMsSqlContextModelSnapshot.cs | 2 +- .../20241113011629_InitialMigrate.Designer.cs | 2 +- .../PgSql/20241113011629_InitialMigrate.cs | 0 .../20241113214619_StepTable.Designer.cs | 2 +- .../PgSql/20241113214619_StepTable.cs | 0 ...1212040307_UpdateInstancaModel.Designer.cs | 2 +- .../20241212040307_UpdateInstancaModel.cs | 0 .../AdminConsolePgSqlContextModelSnapshot.cs | 2 +- ...217230931_AdminConsoleClaimset.Designer.cs | 29 ++++ .../20241217230931_AdminConsoleClaimset.cs | 24 ++++ .../Security/MsSql/AdminConsoleClaimsetUp.sql | 131 ++++++++++++++++++ ...onsoleSecurityMsSqlContextModelSnapshot.cs | 26 ++++ .../MsSql/SQL/AdminConsoleClaimsetUp.sql | 131 ++++++++++++++++++ ...217230946_AdminConsoleClaimset.Designer.cs | 29 ++++ .../20241217230946_AdminConsoleClaimset.cs | 24 ++++ ...onsoleSecurityPgSqlContextModelSnapshot.cs | 26 ++++ .../PgSql/SQL/AdminConsoleClaimsetUp.sql | 122 ++++++++++++++++ .../MsSql/AdminConsoleMsSqlContext.cs | 6 +- .../MsSql/AdminConsoleMsSqlContextFactory.cs | 44 +++--- .../PgSql/AdminConsolePgSqlContext.cs | 6 +- .../PgSql/AdminConsolePgSqlContextFactory.cs | 44 +++--- .../MsSql/AdminConsoleSecurityMsSqlContext.cs | 13 ++ ...AdminConsoleSecurityMsSqlContextFactory.cs | 24 ++++ .../PgSql/AdminConsoleSecurityPgSqlContext.cs | 13 ++ ...AdminConsoleSecurityPgSqlContextFactory.cs | 25 ++++ .../Configurations/AdminConsoleExtension.cs | 26 ++++ .../DatabaseBuilderExtension.cs | 45 ++++-- Application/EdFi.Ods.AdminApi/Program.cs | 1 + .../Queries/GetInstanceByIdQueryTests.cs | 3 +- .../PlatformUsersContextTestBase.cs | 2 +- 37 files changed, 741 insertions(+), 78 deletions(-) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/MsSql/20241113011439_InitialMigrate.Designer.cs (99%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/MsSql/20241113011439_InitialMigrate.cs (100%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/MsSql/20241113205103_StepTable.Designer.cs (99%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/MsSql/20241113205103_StepTable.cs (100%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/MsSql/20241212040410_UpdateInstancaModel.Designer.cs (99%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/MsSql/20241212040410_UpdateInstancaModel.cs (100%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/MsSql/AdminConsoleMsSqlContextModelSnapshot.cs (99%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/PgSql/20241113011629_InitialMigrate.Designer.cs (99%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/PgSql/20241113011629_InitialMigrate.cs (100%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/PgSql/20241113214619_StepTable.Designer.cs (99%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/PgSql/20241113214619_StepTable.cs (100%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/PgSql/20241212040307_UpdateInstancaModel.Designer.cs (99%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/PgSql/20241212040307_UpdateInstancaModel.cs (100%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/{ => Admin}/PgSql/AdminConsolePgSqlContextModelSnapshot.cs (99%) create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.Designer.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleClaimsetUp.sql create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleSecurityMsSqlContextModelSnapshot.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/SQL/AdminConsoleClaimsetUp.sql create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.Designer.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/AdminConsoleSecurityPgSqlContextModelSnapshot.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/SQL/AdminConsoleClaimsetUp.sql rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/{ => Admin}/MsSql/AdminConsoleMsSqlContext.cs (95%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/{ => Admin}/MsSql/AdminConsoleMsSqlContextFactory.cs (95%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/{ => Admin}/PgSql/AdminConsolePgSqlContext.cs (95%) rename Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/{ => Admin}/PgSql/AdminConsolePgSqlContextFactory.cs (95%) create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContext.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContextFactory.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContext.cs create mode 100644 Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContextFactory.cs diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/EdFi.Ods.AdminApi.AdminConsole.csproj b/Application/EdFi.Ods.AdminApi.AdminConsole/EdFi.Ods.AdminApi.AdminConsole.csproj index 19860a4b..d438377d 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/EdFi.Ods.AdminApi.AdminConsole.csproj +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/EdFi.Ods.AdminApi.AdminConsole.csproj @@ -48,11 +48,16 @@ - + - + + Always + + + Always + diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113011439_InitialMigrate.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113011439_InitialMigrate.Designer.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113011439_InitialMigrate.Designer.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113011439_InitialMigrate.Designer.cs index 08920e1c..b3a76e93 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113011439_InitialMigrate.Designer.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113011439_InitialMigrate.Designer.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113011439_InitialMigrate.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113011439_InitialMigrate.cs similarity index 100% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113011439_InitialMigrate.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113011439_InitialMigrate.cs diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113205103_StepTable.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113205103_StepTable.Designer.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113205103_StepTable.Designer.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113205103_StepTable.Designer.cs index d84d2146..c1871adb 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113205103_StepTable.Designer.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113205103_StepTable.Designer.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113205103_StepTable.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113205103_StepTable.cs similarity index 100% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241113205103_StepTable.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241113205103_StepTable.cs diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241212040410_UpdateInstancaModel.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241212040410_UpdateInstancaModel.Designer.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241212040410_UpdateInstancaModel.Designer.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241212040410_UpdateInstancaModel.Designer.cs index 7a415583..5adbc831 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241212040410_UpdateInstancaModel.Designer.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241212040410_UpdateInstancaModel.Designer.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241212040410_UpdateInstancaModel.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241212040410_UpdateInstancaModel.cs similarity index 100% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/20241212040410_UpdateInstancaModel.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/20241212040410_UpdateInstancaModel.cs diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/AdminConsoleMsSqlContextModelSnapshot.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/AdminConsoleMsSqlContextModelSnapshot.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/AdminConsoleMsSqlContextModelSnapshot.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/AdminConsoleMsSqlContextModelSnapshot.cs index de0f3444..2ce1e9a2 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/MsSql/AdminConsoleMsSqlContextModelSnapshot.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/MsSql/AdminConsoleMsSqlContextModelSnapshot.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113011629_InitialMigrate.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113011629_InitialMigrate.Designer.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113011629_InitialMigrate.Designer.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113011629_InitialMigrate.Designer.cs index 1be72f39..7828856a 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113011629_InitialMigrate.Designer.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113011629_InitialMigrate.Designer.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsolePgSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.PgSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113011629_InitialMigrate.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113011629_InitialMigrate.cs similarity index 100% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113011629_InitialMigrate.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113011629_InitialMigrate.cs diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113214619_StepTable.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113214619_StepTable.Designer.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113214619_StepTable.Designer.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113214619_StepTable.Designer.cs index af27b65b..3278f8a7 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113214619_StepTable.Designer.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113214619_StepTable.Designer.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsolePgSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.PgSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113214619_StepTable.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113214619_StepTable.cs similarity index 100% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241113214619_StepTable.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241113214619_StepTable.cs diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241212040307_UpdateInstancaModel.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241212040307_UpdateInstancaModel.Designer.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241212040307_UpdateInstancaModel.Designer.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241212040307_UpdateInstancaModel.Designer.cs index 77b2afe4..f1918438 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241212040307_UpdateInstancaModel.Designer.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241212040307_UpdateInstancaModel.Designer.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsolePgSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.PgSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241212040307_UpdateInstancaModel.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241212040307_UpdateInstancaModel.cs similarity index 100% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/20241212040307_UpdateInstancaModel.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/20241212040307_UpdateInstancaModel.cs diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/AdminConsolePgSqlContextModelSnapshot.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/AdminConsolePgSqlContextModelSnapshot.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/AdminConsolePgSqlContextModelSnapshot.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/AdminConsolePgSqlContextModelSnapshot.cs index bf5b4877..49074715 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/PgSql/AdminConsolePgSqlContextModelSnapshot.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Admin/PgSql/AdminConsolePgSqlContextModelSnapshot.cs @@ -1,6 +1,6 @@ // using System; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsolePgSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.PgSql; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.Designer.cs new file mode 100644 index 00000000..be3de844 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.Designer.cs @@ -0,0 +1,29 @@ +// +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.MsSql; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Artifacts.Security.MsSql +{ + [DbContext(typeof(AdminConsoleSecurityMsSqlContext))] + [Migration("20241217230931_AdminConsoleClaimset")] + partial class AdminConsoleClaimset + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); +#pragma warning restore 612, 618 + } + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.cs new file mode 100644 index 00000000..5ab2f111 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/20241217230931_AdminConsoleClaimset.cs @@ -0,0 +1,24 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Artifacts.Security.MsSql +{ + /// + public partial class AdminConsoleClaimset : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Infrastructure/DataAccess/Artifacts/Security/MsSql/SQL/AdminConsoleClaimsetUp.sql"); + var sqlScript = File.ReadAllText(sqlFile); + migrationBuilder.Sql(sqlScript); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleClaimsetUp.sql b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleClaimsetUp.sql new file mode 100644 index 00000000..850616b1 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleClaimsetUp.sql @@ -0,0 +1,131 @@ +-- SPDX-License-Identifier: Apache-2.0 +-- Licensed to the Ed-Fi Alliance under one or more agreements. +-- The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +-- See the LICENSE and NOTICES files in the project root for more information. + +-- Create Ed-Fi ODS Admin Console ClaimSet + +DECLARE @claimSetName nvarchar(32) + +SET @claimSetName = 'Ed-Fi ODS Admin Console' + +PRINT 'Ensuring Ed-Fi ODS Admin Console Claimset exists.' + +INSERT INTO dbo.ClaimSets (ClaimSetName, IsEdfiPreset) +SELECT DISTINCT @claimSetName, 1 FROM dbo.ClaimSets +WHERE NOT EXISTS (SELECT 1 + FROM dbo.ClaimSets + WHERE ClaimSetName = @claimSetName ) +GO + +-- Configure Ed-Fi ODS Admin Console ClaimSet + +DECLARE @actionName nvarchar(32) +DECLARE @claimSetName nvarchar(255) +DECLARE @resourceNames TABLE (ResourceName nvarchar(64)) +DECLARE @resourceClaimIds TABLE (ResourceClaimId int) +DECLARE @authorizationStrategyId INT +DECLARE @ResourceClaimId INT + +SET @claimSetName = 'Ed-Fi ODS Admin Console' + +IF EXISTS (SELECT 1 FROM dbo.ClaimSets c WHERE c.ClaimSetName = @claimSetName) +BEGIN + DECLARE @edFiOdsAdminConsoleClaimSetId as INT + + SELECT @edFiOdsAdminConsoleClaimSetId = ClaimsetId + FROM dbo.ClaimSets + WHERE ClaimSets.ClaimSetName = @claimSetName + + DELETE csrcaaso + FROM dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides csrcaaso + INNER JOIN dbo.ClaimSetResourceClaimActions ON csrcaaso.ClaimSetResourceClaimActionId = dbo.ClaimSetResourceClaimActions.ClaimSetResourceClaimActionId + WHERE dbo.ClaimSetResourceClaimActions.ClaimSetId = @edFiOdsAdminConsoleClaimSetId + + DELETE FROM dbo.ClaimSetResourceClaimActions + WHERE ClaimSetId = @edFiOdsAdminConsoleClaimSetId + + PRINT 'Creating Temporary Records.' + INSERT INTO @resourceNames VALUES + ('section'), + ('school'), + ('student'), + ('studentSchoolAssociation'), + ('studentSpecialEducationProgramAssociation'), + ('studentDisciplineIncidentBehaviorAssociation'), + ('studentSchoolAssociation'), + ('studentSchoolAttendanceEvent'), + ('studentSectionAssociation'), + ('staffEducationOrganizationAssignmentAssociation'), + ('staffSectionAssociation'), + ('courseTranscript') + INSERT INTO @resourceClaimIds SELECT ResourceClaimId FROM dbo.ResourceClaims WHERE ResourceName IN (SELECT ResourceName FROM @resourceNames) +END + +SELECT @authorizationStrategyId = AuthorizationStrategyId +FROM dbo.AuthorizationStrategies +WHERE AuthorizationStrategyName = 'NoFurtherAuthorizationRequired' + +DECLARE @actionId int +DECLARE @claimSetId int + +SELECT @claimSetId = ClaimSetId FROM dbo.ClaimSets WHERE ClaimSetName = @claimSetName + +PRINT 'Configuring Claims for Ed-Fi ODS Admin Console Claimset...' + +IF NOT EXISTS (SELECT 1 + FROM dbo.ClaimSetResourceClaimActions csraa,dbo.Actions a, @resourceClaimIds rc + WHERE csraa.ActionId = a.ActionId AND ClaimSetId = @claimSetId AND csraa.ResourceClaimId = rc.ResourceClaimId) + +BEGIN + INSERT INTO dbo.ClaimSetResourceClaimActions (ActionId, ClaimSetId, ResourceClaimId) + SELECT ActionId, @claimSetId, rc.ResourceClaimId + FROM dbo.Actions, @resourceClaimIds rc + WHERE ActionName in ('Read') + AND NOT EXISTS ( + SELECT 1 + FROM dbo.ClaimSetResourceClaimActions + WHERE ActionId = Actions.ActionId AND ClaimSetId = @claimSetId AND ResourceClaimId = rc.ResourceClaimId + ) + + INSERT INTO dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides (AuthorizationStrategyId, ClaimSetResourceClaimActionId) + SELECT @authorizationStrategyId, ClaimSetResourceClaimActionId + FROM dbo.ClaimSetResourceClaimActions csrc + INNER JOIN dbo.ResourceClaims r + ON csrc.ResourceClaimId = r.ResourceClaimId AND csrc.ClaimSetId = @claimSetId + WHERE r.ResourceName IN ( + 'section', + 'school', + 'student', + 'studentSchoolAssociation', + 'studentSpecialEducationProgramAssociation', + 'studentDisciplineIncidentBehaviorAssociation', + 'studentSchoolAssociation', + 'studentSchoolAttendanceEvent', + 'studentSectionAssociation', + 'staffEducationOrganizationAssignmentAssociation', + 'staffSectionAssociation', + 'courseTranscript') +END + +SELECT @actionId = ActionId FROM dbo.Actions WHERE ActionName = 'Read' +SELECT @ResourceClaimId = ResourceClaimId FROM dbo.ResourceClaims WHERE ResourceName = 'types' + +IF NOT EXISTS ( + SELECT 1 FROM dbo.ClaimSetResourceClaimActions + WHERE ClaimSetResourceClaimActions.ActionId = @actionId AND ClaimSetResourceClaimActions.ClaimSetId = @claimSetId + AND ClaimSetResourceClaimActions.ResourceClaimId = @ResourceClaimId) +BEGIN + INSERT INTO dbo.ClaimSetResourceClaimActions (ActionId, ClaimSetId, ResourceClaimId) + VALUES (@actionId, @claimSetId, @ResourceClaimId) + + INSERT INTO dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides (AuthorizationStrategyId, ClaimSetResourceClaimActionId) + SELECT @authorizationStrategyId, ClaimSetResourceClaimActions.ClaimSetResourceClaimActionId + FROM dbo.ClaimSetResourceClaimActions + INNER JOIN dbo.ResourceClaims r + ON ClaimSetResourceClaimActions.ResourceClaimId = r.ResourceClaimId + INNER JOIN dbo.Actions + ON Actions.actionId = ClaimSetResourceClaimActions.ActionId AND Actions.ActionName in ('Read') + WHERE r.ResourceName IN ('types') AND ClaimSetResourceClaimActions.ActionId = @actionId AND ClaimSetResourceClaimActions.ClaimSetId = @claimSetId +END +GO diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleSecurityMsSqlContextModelSnapshot.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleSecurityMsSqlContextModelSnapshot.cs new file mode 100644 index 00000000..ae83e15b --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/AdminConsoleSecurityMsSqlContextModelSnapshot.cs @@ -0,0 +1,26 @@ +// +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.MsSql; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Artifacts.Security.MsSql +{ + [DbContext(typeof(AdminConsoleSecurityMsSqlContext))] + partial class AdminConsoleSecurityMsSqlContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); +#pragma warning restore 612, 618 + } + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/SQL/AdminConsoleClaimsetUp.sql b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/SQL/AdminConsoleClaimsetUp.sql new file mode 100644 index 00000000..850616b1 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/MsSql/SQL/AdminConsoleClaimsetUp.sql @@ -0,0 +1,131 @@ +-- SPDX-License-Identifier: Apache-2.0 +-- Licensed to the Ed-Fi Alliance under one or more agreements. +-- The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +-- See the LICENSE and NOTICES files in the project root for more information. + +-- Create Ed-Fi ODS Admin Console ClaimSet + +DECLARE @claimSetName nvarchar(32) + +SET @claimSetName = 'Ed-Fi ODS Admin Console' + +PRINT 'Ensuring Ed-Fi ODS Admin Console Claimset exists.' + +INSERT INTO dbo.ClaimSets (ClaimSetName, IsEdfiPreset) +SELECT DISTINCT @claimSetName, 1 FROM dbo.ClaimSets +WHERE NOT EXISTS (SELECT 1 + FROM dbo.ClaimSets + WHERE ClaimSetName = @claimSetName ) +GO + +-- Configure Ed-Fi ODS Admin Console ClaimSet + +DECLARE @actionName nvarchar(32) +DECLARE @claimSetName nvarchar(255) +DECLARE @resourceNames TABLE (ResourceName nvarchar(64)) +DECLARE @resourceClaimIds TABLE (ResourceClaimId int) +DECLARE @authorizationStrategyId INT +DECLARE @ResourceClaimId INT + +SET @claimSetName = 'Ed-Fi ODS Admin Console' + +IF EXISTS (SELECT 1 FROM dbo.ClaimSets c WHERE c.ClaimSetName = @claimSetName) +BEGIN + DECLARE @edFiOdsAdminConsoleClaimSetId as INT + + SELECT @edFiOdsAdminConsoleClaimSetId = ClaimsetId + FROM dbo.ClaimSets + WHERE ClaimSets.ClaimSetName = @claimSetName + + DELETE csrcaaso + FROM dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides csrcaaso + INNER JOIN dbo.ClaimSetResourceClaimActions ON csrcaaso.ClaimSetResourceClaimActionId = dbo.ClaimSetResourceClaimActions.ClaimSetResourceClaimActionId + WHERE dbo.ClaimSetResourceClaimActions.ClaimSetId = @edFiOdsAdminConsoleClaimSetId + + DELETE FROM dbo.ClaimSetResourceClaimActions + WHERE ClaimSetId = @edFiOdsAdminConsoleClaimSetId + + PRINT 'Creating Temporary Records.' + INSERT INTO @resourceNames VALUES + ('section'), + ('school'), + ('student'), + ('studentSchoolAssociation'), + ('studentSpecialEducationProgramAssociation'), + ('studentDisciplineIncidentBehaviorAssociation'), + ('studentSchoolAssociation'), + ('studentSchoolAttendanceEvent'), + ('studentSectionAssociation'), + ('staffEducationOrganizationAssignmentAssociation'), + ('staffSectionAssociation'), + ('courseTranscript') + INSERT INTO @resourceClaimIds SELECT ResourceClaimId FROM dbo.ResourceClaims WHERE ResourceName IN (SELECT ResourceName FROM @resourceNames) +END + +SELECT @authorizationStrategyId = AuthorizationStrategyId +FROM dbo.AuthorizationStrategies +WHERE AuthorizationStrategyName = 'NoFurtherAuthorizationRequired' + +DECLARE @actionId int +DECLARE @claimSetId int + +SELECT @claimSetId = ClaimSetId FROM dbo.ClaimSets WHERE ClaimSetName = @claimSetName + +PRINT 'Configuring Claims for Ed-Fi ODS Admin Console Claimset...' + +IF NOT EXISTS (SELECT 1 + FROM dbo.ClaimSetResourceClaimActions csraa,dbo.Actions a, @resourceClaimIds rc + WHERE csraa.ActionId = a.ActionId AND ClaimSetId = @claimSetId AND csraa.ResourceClaimId = rc.ResourceClaimId) + +BEGIN + INSERT INTO dbo.ClaimSetResourceClaimActions (ActionId, ClaimSetId, ResourceClaimId) + SELECT ActionId, @claimSetId, rc.ResourceClaimId + FROM dbo.Actions, @resourceClaimIds rc + WHERE ActionName in ('Read') + AND NOT EXISTS ( + SELECT 1 + FROM dbo.ClaimSetResourceClaimActions + WHERE ActionId = Actions.ActionId AND ClaimSetId = @claimSetId AND ResourceClaimId = rc.ResourceClaimId + ) + + INSERT INTO dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides (AuthorizationStrategyId, ClaimSetResourceClaimActionId) + SELECT @authorizationStrategyId, ClaimSetResourceClaimActionId + FROM dbo.ClaimSetResourceClaimActions csrc + INNER JOIN dbo.ResourceClaims r + ON csrc.ResourceClaimId = r.ResourceClaimId AND csrc.ClaimSetId = @claimSetId + WHERE r.ResourceName IN ( + 'section', + 'school', + 'student', + 'studentSchoolAssociation', + 'studentSpecialEducationProgramAssociation', + 'studentDisciplineIncidentBehaviorAssociation', + 'studentSchoolAssociation', + 'studentSchoolAttendanceEvent', + 'studentSectionAssociation', + 'staffEducationOrganizationAssignmentAssociation', + 'staffSectionAssociation', + 'courseTranscript') +END + +SELECT @actionId = ActionId FROM dbo.Actions WHERE ActionName = 'Read' +SELECT @ResourceClaimId = ResourceClaimId FROM dbo.ResourceClaims WHERE ResourceName = 'types' + +IF NOT EXISTS ( + SELECT 1 FROM dbo.ClaimSetResourceClaimActions + WHERE ClaimSetResourceClaimActions.ActionId = @actionId AND ClaimSetResourceClaimActions.ClaimSetId = @claimSetId + AND ClaimSetResourceClaimActions.ResourceClaimId = @ResourceClaimId) +BEGIN + INSERT INTO dbo.ClaimSetResourceClaimActions (ActionId, ClaimSetId, ResourceClaimId) + VALUES (@actionId, @claimSetId, @ResourceClaimId) + + INSERT INTO dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides (AuthorizationStrategyId, ClaimSetResourceClaimActionId) + SELECT @authorizationStrategyId, ClaimSetResourceClaimActions.ClaimSetResourceClaimActionId + FROM dbo.ClaimSetResourceClaimActions + INNER JOIN dbo.ResourceClaims r + ON ClaimSetResourceClaimActions.ResourceClaimId = r.ResourceClaimId + INNER JOIN dbo.Actions + ON Actions.actionId = ClaimSetResourceClaimActions.ActionId AND Actions.ActionName in ('Read') + WHERE r.ResourceName IN ('types') AND ClaimSetResourceClaimActions.ActionId = @actionId AND ClaimSetResourceClaimActions.ClaimSetId = @claimSetId +END +GO diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.Designer.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.Designer.cs new file mode 100644 index 00000000..72bdfc20 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.Designer.cs @@ -0,0 +1,29 @@ +// +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.PgSql; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Artifacts.Security.PgSql +{ + [DbContext(typeof(AdminConsoleSecurityPgSqlContext))] + [Migration("20241217230946_AdminConsoleClaimset")] + partial class AdminConsoleClaimset + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); +#pragma warning restore 612, 618 + } + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.cs new file mode 100644 index 00000000..1cd9b929 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/20241217230946_AdminConsoleClaimset.cs @@ -0,0 +1,24 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Artifacts.Security.PgSql +{ + /// + public partial class AdminConsoleClaimset : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Infrastructure/DataAccess/Artifacts/Security/PgSql/SQL/AdminConsoleClaimsetUp.sql"); + var sqlScript = File.ReadAllText(sqlFile); + migrationBuilder.Sql(sqlScript); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/AdminConsoleSecurityPgSqlContextModelSnapshot.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/AdminConsoleSecurityPgSqlContextModelSnapshot.cs new file mode 100644 index 00000000..acee57fd --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/AdminConsoleSecurityPgSqlContextModelSnapshot.cs @@ -0,0 +1,26 @@ +// +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.PgSql; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Artifacts.Security.PgSql +{ + [DbContext(typeof(AdminConsoleSecurityPgSqlContext))] + partial class AdminConsoleSecurityPgSqlContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); +#pragma warning restore 612, 618 + } + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/SQL/AdminConsoleClaimsetUp.sql b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/SQL/AdminConsoleClaimsetUp.sql new file mode 100644 index 00000000..affa89fc --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Artifacts/Security/PgSql/SQL/AdminConsoleClaimsetUp.sql @@ -0,0 +1,122 @@ +-- SPDX-License-Identifier: Apache-2.0 +-- Licensed to the Ed-Fi Alliance under one or more agreements. +-- The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +-- See the LICENSE and NOTICES files in the project root for more information. + +-- Create Ed-Fi ODS Admin Console ClaimSet +DO $$ + DECLARE claimset_name varchar(50) := 'Ed-Fi ODS Admin Console'; + DECLARE claimset_id int; + DECLARE authorizationStrategy_id int; +BEGIN + + -- Creating Ed-Fi ODS Admin Console claim set + IF EXISTS (SELECT 1 FROM dbo.claimsets WHERE claimsetname = claimset_name) + THEN + RAISE NOTICE '% claimset exists', claimset_name; + ELSE + RAISE NOTICE 'adding % claimset', claimset_name; + INSERT INTO dbo.ClaimSets (ClaimSetName, isedfipreset) VALUES (claimset_name, True); + END IF; + +-- Configure Ed-Fi ODS Admin Console ClaimSet + + SELECT claimsetid INTO claimset_id + FROM dbo.claimsets + WHERE claimsetname = claimset_name; + + DELETE + FROM dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides csrcaaso + USING dbo.ClaimSetResourceClaimActions csrc + WHERE csrcaaso.ClaimSetResourceClaimActionId = csrc.ClaimSetResourceClaimActionId AND csrc.ClaimSetId = claimset_id; + + DELETE FROM dbo.ClaimSetResourceClaimActions WHERE ClaimSetId = claimset_id; + + SELECT authorizationstrategyid INTO authorizationStrategy_id + FROM dbo.authorizationstrategies + WHERE authorizationstrategyname = 'NoFurtherAuthorizationRequired'; + + IF EXISTS (SELECT 1 FROM dbo.ClaimSetResourceClaimActions WHERE ClaimSetId = claimset_id) + THEN + RAISE NOTICE 'claims already exist for claim %', claimset_name; + ELSE + RAISE NOTICE 'Configuring Claims for % Claimset...', claimset_name; + INSERT INTO dbo.ClaimSetResourceClaimActions + (ActionId + ,ClaimSetId + ,ResourceClaimId) + SELECT ac.actionid, claimset_id, resourceclaimid + FROM dbo.resourceclaims + INNER JOIN LATERAL + ( + SELECT actionid + FROM dbo.actions + WHERE actionname in ('Read') + ) AS ac ON true + WHERE resourcename IN + ( + 'section', + 'school', + 'student', + 'studentSchoolAssociation', + 'studentSpecialEducationProgramAssociation', + 'studentDisciplineIncidentBehaviorAssociation', + 'studentSchoolAssociation', + 'studentSchoolAttendanceEvent', + 'studentSectionAssociation', + 'staffEducationOrganizationAssignmentAssociation', + 'staffSectionAssociation', + 'courseTranscript' + ); + + INSERT INTO dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides + ( + AuthorizationStrategyId + ,ClaimSetResourceClaimActionId + ) + SELECT authorizationStrategy_id, csrc.ClaimSetResourceClaimActionId + FROM dbo.ClaimSetResourceClaimActions csrc + INNER JOIN dbo.ResourceClaims r + ON csrc.ResourceClaimId = r.ResourceClaimId AND csrc.ClaimSetId = claimset_id + WHERE r.resourcename IN + ( + 'section', + 'school', + 'student', + 'studentSchoolAssociation', + 'studentSpecialEducationProgramAssociation', + 'studentDisciplineIncidentBehaviorAssociation', + 'studentSchoolAssociation', + 'studentSchoolAttendanceEvent', + 'studentSectionAssociation', + 'staffEducationOrganizationAssignmentAssociation', + 'staffSectionAssociation', + 'courseTranscript' + ); + + END IF; + + INSERT INTO dbo.ClaimSetResourceClaimActions + (ActionId + ,ClaimSetId + ,ResourceClaimId) + SELECT ac.actionid, claimset_id, resourceclaimid + FROM dbo.resourceclaims + INNER JOIN LATERAL + ( + SELECT actionid + FROM dbo.actions + WHERE actionname in ('Read') + ) AS ac ON true + WHERE resourcename IN ('types'); + + INSERT INTO dbo.ClaimSetResourceClaimActionAuthorizationStrategyOverrides + (AuthorizationStrategyId + ,ClaimSetResourceClaimActionId) + SELECT authorizationStrategy_id, csrc.ClaimSetResourceClaimActionId + FROM dbo.ClaimSetResourceClaimActions csrc + INNER JOIN dbo.ResourceClaims r ON csrc.ResourceClaimId = r.ResourceClaimId + INNER JOIN dbo.Actions a ON a.ActionId = csrc.ActionId AND a.ActionName in ('Read') + WHERE resourcename IN ('types') AND csrc.ActionId = a.ActionId AND csrc.ClaimSetId = claimset_id; + +END $$; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/MsSql/AdminConsoleMsSqlContext.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/MsSql/AdminConsoleMsSqlContext.cs similarity index 95% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/MsSql/AdminConsoleMsSqlContext.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/MsSql/AdminConsoleMsSqlContext.cs index 2da0597c..01b1ddea 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/MsSql/AdminConsoleMsSqlContext.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/MsSql/AdminConsoleMsSqlContext.cs @@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; public class AdminConsoleMsSqlContext : DbContext, IDbContext { @@ -21,8 +21,8 @@ public AdminConsoleMsSqlContext(DbContextOptions optio public DbSet Steps { get; set; } - public DatabaseFacade DB => this.Database; - + public DatabaseFacade DB => Database; + protected override void OnModelCreating(ModelBuilder modelBuilder) { const string DbProvider = DbProviders.SqlServer; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/MsSql/AdminConsoleMsSqlContextFactory.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/MsSql/AdminConsoleMsSqlContextFactory.cs similarity index 95% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/MsSql/AdminConsoleMsSqlContextFactory.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/MsSql/AdminConsoleMsSqlContextFactory.cs index a43ca63a..23eb9f47 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/MsSql/AdminConsoleMsSqlContextFactory.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/MsSql/AdminConsoleMsSqlContextFactory.cs @@ -1,22 +1,22 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Design; -using Microsoft.Extensions.Configuration; -namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; -internal class AdminConsoleMsSqlContextFactory : IDesignTimeDbContextFactory -{ - public AdminConsoleMsSqlContext CreateDbContext(string[] args) - { - var configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - var connectionString = configuration.GetConnectionString("EdFi_Admin"); - var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseSqlServer(connectionString); - return new AdminConsoleMsSqlContext(optionsBuilder.Options); - } -} +// SPDX-License-Identifier: Apache-2.0 +// Licensed to the Ed-Fi Alliance under one or more agreements. +// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +// See the LICENSE and NOTICES files in the project root for more information. +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; +internal class AdminConsoleMsSqlContextFactory : IDesignTimeDbContextFactory +{ + public AdminConsoleMsSqlContext CreateDbContext(string[] args) + { + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .Build(); + var connectionString = configuration.GetConnectionString("EdFi_Admin"); + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseSqlServer(connectionString); + return new AdminConsoleMsSqlContext(optionsBuilder.Options); + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/PgSql/AdminConsolePgSqlContext.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/PgSql/AdminConsolePgSqlContext.cs similarity index 95% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/PgSql/AdminConsolePgSqlContext.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/PgSql/AdminConsolePgSqlContext.cs index 8da657f2..d79a07d8 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/PgSql/AdminConsolePgSqlContext.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/PgSql/AdminConsolePgSqlContext.cs @@ -9,7 +9,7 @@ using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; -namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsolePgSql; +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.PgSql; public class AdminConsolePgSqlContext : DbContext, IDbContext { @@ -22,8 +22,8 @@ public AdminConsolePgSqlContext(DbContextOptions optio public DbSet Steps { get; set; } - public DatabaseFacade DB => this.Database; - + public DatabaseFacade DB => Database; + protected override void OnModelCreating(ModelBuilder modelBuilder) { const string DbProvider = DbProviders.PostgreSql; diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/PgSql/AdminConsolePgSqlContextFactory.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/PgSql/AdminConsolePgSqlContextFactory.cs similarity index 95% rename from Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/PgSql/AdminConsolePgSqlContextFactory.cs rename to Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/PgSql/AdminConsolePgSqlContextFactory.cs index 00f8e249..ab8c8bf6 100644 --- a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/PgSql/AdminConsolePgSqlContextFactory.cs +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Admin/PgSql/AdminConsolePgSqlContextFactory.cs @@ -1,22 +1,22 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Design; -using Microsoft.Extensions.Configuration; -namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsolePgSql; -public class AdminConsolePgSqlContextFactory : IDesignTimeDbContextFactory -{ - public AdminConsolePgSqlContext CreateDbContext(string[] args) - { - var configuration = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - var connectionString = configuration.GetConnectionString("EdFi_Admin"); - var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseNpgsql(connectionString); - return new AdminConsolePgSqlContext(optionsBuilder.Options); - } -} +// SPDX-License-Identifier: Apache-2.0 +// Licensed to the Ed-Fi Alliance under one or more agreements. +// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +// See the LICENSE and NOTICES files in the project root for more information. +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.PgSql; +public class AdminConsolePgSqlContextFactory : IDesignTimeDbContextFactory +{ + public AdminConsolePgSqlContext CreateDbContext(string[] args) + { + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .Build(); + var connectionString = configuration.GetConnectionString("EdFi_Admin"); + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseNpgsql(connectionString); + return new AdminConsolePgSqlContext(optionsBuilder.Options); + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContext.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContext.cs new file mode 100644 index 00000000..006a813d --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContext.cs @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +// Licensed to the Ed-Fi Alliance under one or more agreements. +// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +// See the LICENSE and NOTICES files in the project root for more information. + +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.ModelConfiguration; +using Microsoft.EntityFrameworkCore; + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.MsSql; +public class AdminConsoleSecurityMsSqlContext : DbContext +{ + public AdminConsoleSecurityMsSqlContext(DbContextOptions options) : base(options) { } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContextFactory.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContextFactory.cs new file mode 100644 index 00000000..c881ec04 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/MsSql/AdminConsoleSecurityMsSqlContextFactory.cs @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +// Licensed to the Ed-Fi Alliance under one or more agreements. +// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +// See the LICENSE and NOTICES files in the project root for more information. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.MsSql; +internal class AdminConsoleSecurityMsSqlContextFactory : IDesignTimeDbContextFactory +{ + public AdminConsoleSecurityMsSqlContext CreateDbContext(string[] args) + { + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .Build(); + var connectionString = configuration.GetConnectionString("EdFi_Security"); + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseSqlServer(connectionString); + return new AdminConsoleSecurityMsSqlContext(optionsBuilder.Options); + } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContext.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContext.cs new file mode 100644 index 00000000..87b4e235 --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContext.cs @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +// Licensed to the Ed-Fi Alliance under one or more agreements. +// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +// See the LICENSE and NOTICES files in the project root for more information. + +using Microsoft.EntityFrameworkCore; + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.PgSql; + +public class AdminConsoleSecurityPgSqlContext : DbContext +{ + public AdminConsoleSecurityPgSqlContext(DbContextOptions options) : base(options) { } +} diff --git a/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContextFactory.cs b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContextFactory.cs new file mode 100644 index 00000000..aa9028ac --- /dev/null +++ b/Application/EdFi.Ods.AdminApi.AdminConsole/Infrastructure/DataAccess/Contexts/Security/PgSql/AdminConsoleSecurityPgSqlContextFactory.cs @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +// Licensed to the Ed-Fi Alliance under one or more agreements. +// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +// See the LICENSE and NOTICES files in the project root for more information. + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; + +namespace EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.PgSql; + +internal class AdminConsoleSecurityPgSqlContextFactory : IDesignTimeDbContextFactory +{ + public AdminConsoleSecurityPgSqlContext CreateDbContext(string[] args) + { + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .Build(); + var connectionString = configuration.GetConnectionString("EdFi_Security"); + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseNpgsql(connectionString); + return new AdminConsoleSecurityPgSqlContext(optionsBuilder.Options); + } +} diff --git a/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/AdminConsoleExtension.cs b/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/AdminConsoleExtension.cs index 0b11877a..51284359 100644 --- a/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/AdminConsoleExtension.cs +++ b/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/AdminConsoleExtension.cs @@ -3,11 +3,15 @@ // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.MsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.PgSql; using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.Services.Tenants; using EdFi.Ods.AdminApi.Common.Constants; using EdFi.Ods.AdminApi.Common.Infrastructure.Context; using EdFi.Ods.AdminApi.Common.Infrastructure.MultiTenancy; using EdFi.Ods.AdminApi.Common.Settings; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; namespace EdFi.Ods.AdminApi.AdminConsole; @@ -64,4 +68,26 @@ public static async Task InitAdminConsoleData(this WebApplication app) } } } + + public static void MigrateSecurityDbContext(this WebApplication app) + { + using (var scope = app.Services.CreateScope()) + { + DbContext dbContext; + var databaseEngine = DbProviders.Parse(app.Configuration.GetValue("AppSettings:DatabaseEngine")!); + + switch (databaseEngine) + { + case DbProviders.SqlServer: + dbContext = scope.ServiceProvider.GetRequiredService(); + dbContext.Database.Migrate(); + break; + case DbProviders.PostgreSql: + dbContext = scope.ServiceProvider.GetRequiredService(); + dbContext.Database.Migrate(); + break; + } + } + + } } diff --git a/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/DatabaseBuilderExtension.cs b/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/DatabaseBuilderExtension.cs index 2ad4d81f..f7c42ebc 100644 --- a/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/DatabaseBuilderExtension.cs +++ b/Application/EdFi.Ods.AdminApi/AdminConsole/Configurations/DatabaseBuilderExtension.cs @@ -5,17 +5,14 @@ using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess; using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsolePgSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.PgSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.MsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Security.PgSql; using EdFi.Ods.AdminApi.Common.Infrastructure.Context; using EdFi.Ods.AdminApi.Common.Infrastructure.Extensions; using EdFi.Ods.AdminApi.Common.Infrastructure.MultiTenancy; -using EdFi.Ods.AdminApi.Common.Settings; -using Microsoft.AspNetCore.Builder; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; namespace EdFi.Ods.AdminApi.AdminConsole; @@ -31,32 +28,49 @@ public static void ConfigureAdminConsoleDatabase(this WebApplicationBuilder webA switch (databaseEngine) { case DbProviders.SqlServer: + /// Admin webApplicationBuilder.Services.AddDbContext( (sp, options) => { - options.UseSqlServer(AdminConnectionString(sp)); + options.UseSqlServer(AdminConnection(sp).AdminConnectionString); + }); + + /// Security + webApplicationBuilder.Services.AddDbContext( + (sp, options) => + { + options.UseSqlServer(AdminConnection(sp).SecurityConnectionString); }); break; case DbProviders.PostgreSql: + /// Admin webApplicationBuilder.Services.AddDbContext( (sp, options) => { - options.UseNpgsql(AdminConnectionString(sp)); + options.UseNpgsql(AdminConnection(sp).AdminConnectionString); + }); + + /// Security + webApplicationBuilder.Services.AddDbContext( + (sp, options) => + { + options.UseNpgsql(AdminConnection(sp).SecurityConnectionString); }); break; default: throw new ArgumentException($"Unexpected DB setup error. Engine '{databaseEngine}' was parsed as valid but is not configured for startup."); } - string AdminConnectionString(IServiceProvider serviceProvider) + TenantConfiguration AdminConnection(IServiceProvider serviceProvider) { - var adminConnectionString = string.Empty; + var connection = new TenantConfiguration(); if (multiTenancyEnabled) { var tenant = serviceProvider.GetRequiredService>().Get(); - if (tenant != null && !string.IsNullOrEmpty(tenant.AdminConnectionString)) + if (tenant != null && !string.IsNullOrEmpty(tenant.AdminConnectionString) && !string.IsNullOrEmpty(tenant.SecurityConnectionString)) { - adminConnectionString = tenant.AdminConnectionString; + connection.AdminConnectionString = tenant.AdminConnectionString; + connection.SecurityConnectionString = tenant.SecurityConnectionString; } else { @@ -65,10 +79,11 @@ string AdminConnectionString(IServiceProvider serviceProvider) } else { - adminConnectionString = config.GetConnectionStringByName("EdFi_Admin"); + connection.AdminConnectionString = config.GetConnectionStringByName("EdFi_Admin"); + connection.SecurityConnectionString = config.GetConnectionStringByName("EdFi_Security"); } - return adminConnectionString; + return connection; } } } diff --git a/Application/EdFi.Ods.AdminApi/Program.cs b/Application/EdFi.Ods.AdminApi/Program.cs index f841afcb..e66e3297 100644 --- a/Application/EdFi.Ods.AdminApi/Program.cs +++ b/Application/EdFi.Ods.AdminApi/Program.cs @@ -65,6 +65,7 @@ app.MapAdminConsoleFeatureEndpoints(); //Initialize data await app.InitAdminConsoleData(); + app.MigrateSecurityDbContext(); } app.MapControllers(); diff --git a/Application/EdFi.Ods.AdminConsole.DBTests/Database/Queries/GetInstanceByIdQueryTests.cs b/Application/EdFi.Ods.AdminConsole.DBTests/Database/Queries/GetInstanceByIdQueryTests.cs index 1a5b478b..6312bbb7 100644 --- a/Application/EdFi.Ods.AdminConsole.DBTests/Database/Queries/GetInstanceByIdQueryTests.cs +++ b/Application/EdFi.Ods.AdminConsole.DBTests/Database/Queries/GetInstanceByIdQueryTests.cs @@ -65,7 +65,7 @@ public void ShouldExecute() { var repository = new QueriesRepository(dbContext); var query = new GetInstanceByIdQuery(repository, Testing.GetEncryptionKeyResolver(), new EncryptionService()); - var instance = await query.Execute(result.TenantId, result.OdsInstanceId); + var instance = await query.Execute(result.OdsInstanceId); instance.DocId.ShouldBe(result.DocId); instance.TenantId.ShouldBe(newInstance.TenantId); @@ -73,7 +73,6 @@ public void ShouldExecute() instance.EdOrgId.ShouldBe(newInstance.EdOrgId); instance.Document.ShouldBe(JsonSerializer.Serialize(newInstance.Document)); }); - } private class TestInstance : IAddInstanceModel diff --git a/Application/EdFi.Ods.AdminConsole.DBTests/PlatformUsersContextTestBase.cs b/Application/EdFi.Ods.AdminConsole.DBTests/PlatformUsersContextTestBase.cs index 6591edb5..4915d851 100644 --- a/Application/EdFi.Ods.AdminConsole.DBTests/PlatformUsersContextTestBase.cs +++ b/Application/EdFi.Ods.AdminConsole.DBTests/PlatformUsersContextTestBase.cs @@ -6,7 +6,7 @@ using System; using System.Threading.Tasks; using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts; -using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.AdminConsoleMsSql; +using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Contexts.Admin.MsSql; using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.DataAccess.Models; using EdFi.Ods.AdminApi.AdminConsole.Infrastructure.Repositories; using Microsoft.EntityFrameworkCore;