From 8967536e927b907f3c0a11b5893849c46febbefc Mon Sep 17 00:00:00 2001
From: Dmitriy Myakotin <75628188+MDI74@users.noreply.github.com>
Date: Tue, 24 Feb 2026 11:45:27 +0500
Subject: [PATCH] feat: add AUTO_TESTS_ONLY_IsEntriesHardDeleteAllowed
permission for time
---
Core/Models/Permissions.cs | 1 +
DataAccess/Mapping/MappingData.cs | 1 +
...eleteAllowedPermissionsForTime.Designer.cs | 256 ++++++++++++++++++
...riesHardDeleteAllowedPermissionsForTime.cs | 44 +++
.../Migrations/UsersDbContextModelSnapshot.cs | 4 +-
5 files changed, 304 insertions(+), 2 deletions(-)
create mode 100644 DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.Designer.cs
create mode 100644 DataAccess/Migrations/20260224064334_AddAutoTestsOnlyIsEntriesHardDeleteAllowedPermissionsForTime.cs
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" }
});
});