diff --git a/Core/Models/Permissions.cs b/Core/Models/Permissions.cs index 58f23d9..d58eb32 100644 --- a/Core/Models/Permissions.cs +++ b/Core/Models/Permissions.cs @@ -41,6 +41,7 @@ public static class Permissions public const string CanViewItems = "CanViewItems"; public const string AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed = "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed"; + public const string AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed = "AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed"; public const string CanManagePersonalTimeTracker = "CanManagePersonalTimeTracker"; public static bool IsPermissionExists(string permissionName) diff --git a/DataAccess/Mapping/MappingData.cs b/DataAccess/Mapping/MappingData.cs index a8c1e37..d561d17 100644 --- a/DataAccess/Mapping/MappingData.cs +++ b/DataAccess/Mapping/MappingData.cs @@ -42,6 +42,7 @@ internal static class MappingData new Permission(Permissions.CanManageItems), new Permission(Permissions.CanViewItems), new Permission(Permissions.AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed), + new Permission(Permissions.AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed), new Permission(Permissions.CanManagePersonalTimeTracker), }; diff --git a/DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.Designer.cs b/DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.Designer.cs new file mode 100644 index 0000000..185ec17 --- /dev/null +++ b/DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.Designer.cs @@ -0,0 +1,256 @@ +// +using System; +using DataAccess; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NodaTime; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace UserManagementService.DataAccess.Migrations +{ + [DbContext(typeof(AccountsDbContext))] + [Migration("20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime")] + partial class AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Core.Entities.Account", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CorporateEmail") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("DeletedAtUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("IsBlocked") + .HasColumnType("boolean"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("MiddleName") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("TenantId") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasDefaultValue(1L); + + b.HasKey("Id"); + + b.HasIndex("CorporateEmail") + .IsUnique(); + + b.HasIndex("TenantId"); + + b.ToTable("Accounts"); + + b.HasData( + new + { + Id = 2L, + CorporateEmail = "inner-circle-admin@tourmalinecore.com", + CreatedAt = NodaTime.Instant.FromUnixTimeTicks(15778368000000000L), + FirstName = "Admin", + IsBlocked = false, + LastName = "Admin", + MiddleName = "Admin", + TenantId = 1L + }, + new + { + Id = 1L, + CorporateEmail = "ceo@tourmalinecore.com", + CreatedAt = NodaTime.Instant.FromUnixTimeTicks(15778368000000000L), + FirstName = "Ceo", + IsBlocked = false, + LastName = "Ceo", + MiddleName = "Ceo", + TenantId = 1L + }, + new + { + Id = 3L, + CorporateEmail = "trial@tourmalinecore.com", + CreatedAt = NodaTime.Instant.FromUnixTimeTicks(15778368000000000L), + FirstName = "Trial", + IsBlocked = false, + LastName = "Trial", + MiddleName = "Trial", + TenantId = 1L + }); + }); + + modelBuilder.Entity("Core.Entities.AccountRole", b => + { + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("RoleId") + .HasColumnType("bigint"); + + b.HasKey("AccountId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AccountRoles"); + + b.HasData( + new + { + AccountId = 2L, + RoleId = 1L + }, + new + { + AccountId = 1L, + RoleId = 2L + }, + new + { + AccountId = 3L, + RoleId = 2L + }); + }); + + modelBuilder.Entity("Core.Entities.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permissions") + .IsRequired() + .HasColumnType("text[]"); + + b.HasKey("Id"); + + b.ToTable("Roles"); + + b.HasData( + new + { + Id = 1L, + Name = "Admin", + Permissions = new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" } + }, + new + { + Id = 2L, + Name = "CEO", + Permissions = new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" } + }); + }); + + modelBuilder.Entity("Core.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Tenants"); + + b.HasData( + new + { + Id = 1L, + Name = "TourmalineCore" + }, + new + { + Id = 2L, + Name = "Test" + }); + }); + + modelBuilder.Entity("Core.Entities.Account", b => + { + b.HasOne("Core.Entities.Tenant", "Tenant") + .WithMany("Accounts") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("Core.Entities.AccountRole", b => + { + b.HasOne("Core.Entities.Account", "Account") + .WithMany("AccountRoles") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Core.Entities.Role", "Role") + .WithMany("AccountRoles") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Account"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("Core.Entities.Account", b => + { + b.Navigation("AccountRoles"); + }); + + modelBuilder.Entity("Core.Entities.Role", b => + { + b.Navigation("AccountRoles"); + }); + + modelBuilder.Entity("Core.Entities.Tenant", b => + { + b.Navigation("Accounts"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.cs b/DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.cs new file mode 100644 index 0000000..acae133 --- /dev/null +++ b/DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.cs @@ -0,0 +1,44 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace UserManagementService.DataAccess.Migrations +{ + public partial class AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.UpdateData( + table: "Roles", + keyColumn: "Id", + keyValue: 1L, + column: "Permissions", + value: new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" }); + + migrationBuilder.UpdateData( + table: "Roles", + keyColumn: "Id", + keyValue: 2L, + column: "Permissions", + value: new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.UpdateData( + table: "Roles", + keyColumn: "Id", + keyValue: 1L, + column: "Permissions", + value: new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" }); + + migrationBuilder.UpdateData( + table: "Roles", + keyColumn: "Id", + keyValue: 2L, + column: "Permissions", + value: new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" }); + } + } +} diff --git a/DataAccess/Migrations/UsersDbContextModelSnapshot.cs b/DataAccess/Migrations/UsersDbContextModelSnapshot.cs index d42e328..9835c14 100644 --- a/DataAccess/Migrations/UsersDbContextModelSnapshot.cs +++ b/DataAccess/Migrations/UsersDbContextModelSnapshot.cs @@ -165,13 +165,13 @@ protected override void BuildModel(ModelBuilder modelBuilder) { Id = 1L, Name = "Admin", - Permissions = new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" } + Permissions = new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" } }, new { Id = 2L, Name = "CEO", - Permissions = new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" } + Permissions = new[] { "ViewPersonalProfile", "ViewContacts", "ViewSalaryAndDocumentsData", "EditFullEmployeesData", "AccessAnalyticalForecastsPage", "ViewAccounts", "ManageAccounts", "ViewRoles", "ManageRoles", "CanRequestCompensations", "CanManageCompensations", "CanManageDocuments", "CanManageTenants", "IsTenantsHardDeleteAllowed", "IsAccountsHardDeleteAllowed", "IsCompensationsHardDeleteAllowed", "CanViewBooks", "CanManageBooks", "IsBooksHardDeleteAllowed", "AUTO_TESTS_ONLY_IsSetUserPasswordBypassingEmailConfirmationAllowed", "AUTO_TESTS_ONLY_IsItemTypesHardDeleteAllowed", "CanManageItemsTypes", "CanViewItemsTypes", "AUTO_TESTS_ONLY_IsItemsHardDeleteAllowed", "CanManageItems", "CanViewItems", "AUTO_TESTS_ONLY_IsWorkEntriesHardDeleteAllowed", "AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed", "CanManagePersonalTimeTracker" } }); });