From 8276174526df8d3a4f93d2ce8329d7bd1737896b Mon Sep 17 00:00:00 2001 From: root Date: Thu, 29 Jan 2026 13:47:57 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=E8=B6=85?= =?UTF-8?q?=E7=BA=A7=E7=AE=A1=E7=90=86=E5=91=98=E7=9B=B8=E5=85=B3=E8=BF=81?= =?UTF-8?q?=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ncementPermissionsToSuperAdmin.Designer.cs | 681 ---------------- ...rantAnnouncementPermissionsToSuperAdmin.cs | 129 ---- ...ityUserPermissionsToSuperAdmin.Designer.cs | 726 ------------------ ...rantIdentityUserPermissionsToSuperAdmin.cs | 135 ---- 4 files changed, 1671 deletions(-) delete mode 100644 src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.Designer.cs delete mode 100644 src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.cs delete mode 100644 src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.Designer.cs delete mode 100644 src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.cs diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.Designer.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.Designer.cs deleted file mode 100644 index ab35cda..0000000 --- a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.Designer.cs +++ /dev/null @@ -1,681 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using TakeoutSaaS.Infrastructure.Identity.Persistence; - -#nullable disable - -namespace TakeoutSaaS.Infrastructure.Migrations.IdentityDb -{ - [DbContext(typeof(IdentityDbContext))] - [Migration("20251220183000_GrantAnnouncementPermissionsToSuperAdmin")] - partial class GrantAnnouncementPermissionsToSuperAdmin - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Account") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("登录账号。"); - - b.Property("Avatar") - .HasColumnType("text") - .HasComment("头像地址。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("展示名称。"); - - b.Property("MerchantId") - .HasColumnType("bigint") - .HasComment("所属商户(平台管理员为空)。"); - - b.Property("PasswordHash") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("密码哈希。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "Account") - .IsUnique(); - - b.ToTable("identity_users", null, t => - { - t.HasComment("管理后台账户实体(平台管理员、租户管理员或商户员工)。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.MenuDefinition", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AuthListJson") - .HasColumnType("text") - .HasComment("按钮权限列表 JSON(存储 MenuAuthItemDto 数组)。"); - - b.Property("Component") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("组件路径(不含 .vue)。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Icon") - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("图标标识。"); - - b.Property("IsIframe") - .HasColumnType("boolean") - .HasComment("是否 iframe。"); - - b.Property("KeepAlive") - .HasColumnType("boolean") - .HasComment("是否缓存。"); - - b.Property("Link") - .HasMaxLength(512) - .HasColumnType("character varying(512)") - .HasComment("外链或 iframe 地址。"); - - b.Property("MetaPermissions") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("character varying(1024)") - .HasComment("Meta.permissions(逗号分隔)。"); - - b.Property("MetaRoles") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("character varying(1024)") - .HasComment("Meta.roles(逗号分隔)。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("菜单名称(前端路由 name)。"); - - b.Property("ParentId") - .HasColumnType("bigint") - .HasComment("父级菜单 ID,根节点为 0。"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("路由路径。"); - - b.Property("RequiredPermissions") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("character varying(1024)") - .HasComment("访问该菜单所需的权限集合(逗号分隔)。"); - - b.Property("SortOrder") - .HasColumnType("integer") - .HasComment("排序。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("标题。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ParentId", "SortOrder"); - - b.ToTable("menu_definitions", null, t => - { - t.HasComment("管理端菜单定义。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.MiniUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Avatar") - .HasColumnType("text") - .HasComment("头像地址。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Nickname") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("昵称。"); - - b.Property("OpenId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("微信 OpenId。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UnionId") - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("微信 UnionId,可能为空。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "OpenId") - .IsUnique(); - - b.ToTable("mini_users", null, t => - { - t.HasComment("小程序用户实体。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.Permission", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Code") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("权限编码(租户内唯一)。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("描述。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("权限名称。"); - - b.Property("ParentId") - .HasColumnType("bigint") - .HasComment("父级权限 ID,根节点为 0。"); - - b.Property("SortOrder") - .HasColumnType("integer") - .HasComment("排序值,值越小越靠前。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(16) - .HasColumnType("character varying(16)") - .HasComment("权限类型(group/leaf)。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "Code") - .IsUnique(); - - b.HasIndex("TenantId", "ParentId", "SortOrder"); - - b.ToTable("permissions", null, t => - { - t.HasComment("权限定义。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.Role", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Code") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("角色编码(租户内唯一)。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("描述。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("角色名称。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "Code") - .IsUnique(); - - b.ToTable("roles", null, t => - { - t.HasComment("角色定义。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RolePermission", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("PermissionId") - .HasColumnType("bigint") - .HasComment("权限 ID。"); - - b.Property("RoleId") - .HasColumnType("bigint") - .HasComment("角色 ID。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "RoleId", "PermissionId") - .IsUnique(); - - b.ToTable("role_permissions", null, t => - { - t.HasComment("角色-权限关系。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RoleTemplate", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("模板描述。"); - - b.Property("IsActive") - .HasColumnType("boolean") - .HasComment("是否启用。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("模板名称。"); - - b.Property("TemplateCode") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("模板编码(唯一)。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TemplateCode") - .IsUnique(); - - b.ToTable("role_templates", null, t => - { - t.HasComment("角色模板定义(平台级)。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RoleTemplatePermission", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("PermissionCode") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("权限编码。"); - - b.Property("RoleTemplateId") - .HasColumnType("bigint") - .HasComment("模板 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("RoleTemplateId", "PermissionCode") - .IsUnique(); - - b.ToTable("role_template_permissions", null, t => - { - t.HasComment("角色模板-权限关系(平台级)。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.UserRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("RoleId") - .HasColumnType("bigint") - .HasComment("角色 ID。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.Property("UserId") - .HasColumnType("bigint") - .HasComment("用户 ID。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "UserId", "RoleId") - .IsUnique(); - - b.ToTable("user_roles", null, t => - { - t.HasComment("用户-角色关系。"); - }); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.cs deleted file mode 100644 index b01cb6e..0000000 --- a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251220183000_GrantAnnouncementPermissionsToSuperAdmin.cs +++ /dev/null @@ -1,129 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace TakeoutSaaS.Infrastructure.Migrations.IdentityDb -{ - /// - public partial class GrantAnnouncementPermissionsToSuperAdmin : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.Sql( - @"WITH target_roles AS ( - SELECT ""Id"" AS role_id, ""TenantId"" AS tenant_id - FROM ""roles"" - WHERE ""Code"" IN ('super-admin', 'SUPER_ADMIN', 'PlatformAdmin', 'platform-admin') - AND ""DeletedAt"" IS NULL -), - target_permissions AS ( - SELECT DISTINCT tr.tenant_id, pc.code - FROM target_roles tr - CROSS JOIN (VALUES - ('platform-announcement:create'), - ('platform-announcement:publish'), - ('platform-announcement:revoke'), - ('tenant-announcement:publish'), - ('tenant-announcement:revoke') - ) AS pc(code) -) -INSERT INTO ""permissions"" ( - ""TenantId"", - ""Name"", - ""Code"", - ""Description"", - ""CreatedAt"", - ""CreatedBy"", - ""UpdatedAt"", - ""UpdatedBy"", - ""DeletedAt"", - ""DeletedBy"" -) -SELECT - tp.tenant_id, - tp.code, - tp.code, - CONCAT('Seed permission ', tp.code), - NOW(), - NULL, - NULL, - NULL, - NULL, - NULL -FROM target_permissions tp -ON CONFLICT (""TenantId"", ""Code"") DO NOTHING;" - ); - migrationBuilder.Sql( - @"WITH target_roles AS ( - SELECT ""Id"" AS role_id, ""TenantId"" AS tenant_id - FROM ""roles"" - WHERE ""Code"" IN ('super-admin', 'SUPER_ADMIN', 'PlatformAdmin', 'platform-admin') - AND ""DeletedAt"" IS NULL -) -INSERT INTO ""role_permissions"" ( - ""TenantId"", - ""RoleId"", - ""PermissionId"", - ""CreatedAt"", - ""CreatedBy"", - ""UpdatedAt"", - ""UpdatedBy"", - ""DeletedAt"", - ""DeletedBy"" -) -SELECT - tr.tenant_id, - tr.role_id, - p.""Id"", - NOW(), - NULL, - NULL, - NULL, - NULL, - NULL -FROM target_roles tr -JOIN ""permissions"" p - ON p.""TenantId"" = tr.tenant_id - AND p.""Code"" IN ( - 'platform-announcement:create', - 'platform-announcement:publish', - 'platform-announcement:revoke', - 'tenant-announcement:publish', - 'tenant-announcement:revoke' - ) -WHERE p.""DeletedAt"" IS NULL -ON CONFLICT (""TenantId"", ""RoleId"", ""PermissionId"") DO NOTHING;" - ); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.Sql( - @"WITH target_roles AS ( - SELECT ""Id"" AS role_id, ""TenantId"" AS tenant_id - FROM ""roles"" - WHERE ""Code"" IN ('super-admin', 'SUPER_ADMIN', 'PlatformAdmin', 'platform-admin') - AND ""DeletedAt"" IS NULL -), - target_permissions AS ( - SELECT ""Id"" AS permission_id, ""TenantId"" AS tenant_id - FROM ""permissions"" - WHERE ""Code"" IN ( - 'platform-announcement:create', - 'platform-announcement:publish', - 'platform-announcement:revoke', - 'tenant-announcement:publish', - 'tenant-announcement:revoke' - ) -) -DELETE FROM ""role_permissions"" rp -USING target_roles tr, target_permissions tp -WHERE rp.""TenantId"" = tr.tenant_id - AND rp.""RoleId"" = tr.role_id - AND rp.""PermissionId"" = tp.permission_id;" - ); - } - } -} diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.Designer.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.Designer.cs deleted file mode 100644 index 8ab4246..0000000 --- a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.Designer.cs +++ /dev/null @@ -1,726 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using TakeoutSaaS.Infrastructure.Identity.Persistence; - -#nullable disable - -namespace TakeoutSaaS.Infrastructure.Migrations.IdentityDb -{ - [DbContext(typeof(IdentityDbContext))] - [Migration("20251226231440_GrantIdentityUserPermissionsToSuperAdmin")] - partial class GrantIdentityUserPermissionsToSuperAdmin - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "10.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Account") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("登录账号。"); - - b.Property("Avatar") - .HasColumnType("text") - .HasComment("头像地址。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("展示名称。"); - - b.Property("Email") - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("邮箱(租户内唯一)。"); - - b.Property("FailedLoginCount") - .HasColumnType("integer") - .HasComment("登录失败次数。"); - - b.Property("LastLoginAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近登录时间(UTC)。"); - - b.Property("LockedUntil") - .HasColumnType("timestamp with time zone") - .HasComment("锁定截止时间(UTC)。"); - - b.Property("MerchantId") - .HasColumnType("bigint") - .HasComment("所属商户(平台管理员为空)。"); - - b.Property("MustChangePassword") - .HasColumnType("boolean") - .HasComment("是否强制修改密码。"); - - b.Property("PasswordHash") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("密码哈希。"); - - b.Property("Phone") - .HasMaxLength(32) - .HasColumnType("character varying(32)") - .HasComment("手机号(租户内唯一)。"); - - b.Property("RowVersion") - .IsConcurrencyToken() - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("bytea") - .HasComment("并发控制字段。"); - - b.Property("Status") - .HasColumnType("integer") - .HasComment("账号状态。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "Account") - .IsUnique(); - - b.HasIndex("TenantId", "Email") - .IsUnique() - .HasFilter("\"Email\" IS NOT NULL"); - - b.HasIndex("TenantId", "Phone") - .IsUnique() - .HasFilter("\"Phone\" IS NOT NULL"); - - b.ToTable("identity_users", null, t => - { - t.HasComment("管理后台账户实体(平台管理员、租户管理员或商户员工)。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.MenuDefinition", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("AuthListJson") - .HasColumnType("text") - .HasComment("按钮权限列表 JSON(存储 MenuAuthItemDto 数组)。"); - - b.Property("Component") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("组件路径(不含 .vue)。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Icon") - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("图标标识。"); - - b.Property("IsIframe") - .HasColumnType("boolean") - .HasComment("是否 iframe。"); - - b.Property("KeepAlive") - .HasColumnType("boolean") - .HasComment("是否缓存。"); - - b.Property("Link") - .HasMaxLength(512) - .HasColumnType("character varying(512)") - .HasComment("外链或 iframe 地址。"); - - b.Property("MetaPermissions") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("character varying(1024)") - .HasComment("Meta.permissions(逗号分隔)。"); - - b.Property("MetaRoles") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("character varying(1024)") - .HasComment("Meta.roles(逗号分隔)。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("菜单名称(前端路由 name)。"); - - b.Property("ParentId") - .HasColumnType("bigint") - .HasComment("父级菜单 ID,根节点为 0。"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("路由路径。"); - - b.Property("RequiredPermissions") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("character varying(1024)") - .HasComment("访问该菜单所需的权限集合(逗号分隔)。"); - - b.Property("SortOrder") - .HasColumnType("integer") - .HasComment("排序。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("标题。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ParentId", "SortOrder"); - - b.ToTable("menu_definitions", null, t => - { - t.HasComment("管理端菜单定义。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.MiniUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Avatar") - .HasColumnType("text") - .HasComment("头像地址。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Nickname") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("昵称。"); - - b.Property("OpenId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("微信 OpenId。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UnionId") - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("微信 UnionId,可能为空。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "OpenId") - .IsUnique(); - - b.ToTable("mini_users", null, t => - { - t.HasComment("小程序用户实体。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.Permission", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Code") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("权限编码(租户内唯一)。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("描述。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("权限名称。"); - - b.Property("ParentId") - .HasColumnType("bigint") - .HasComment("父级权限 ID,根节点为 0。"); - - b.Property("SortOrder") - .HasColumnType("integer") - .HasComment("排序值,值越小越靠前。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(16) - .HasColumnType("character varying(16)") - .HasComment("权限类型(group/leaf)。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "Code") - .IsUnique(); - - b.HasIndex("TenantId", "ParentId", "SortOrder"); - - b.ToTable("permissions", null, t => - { - t.HasComment("权限定义。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.Role", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Code") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("角色编码(租户内唯一)。"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("描述。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("角色名称。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "Code") - .IsUnique(); - - b.ToTable("roles", null, t => - { - t.HasComment("角色定义。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RolePermission", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("PermissionId") - .HasColumnType("bigint") - .HasComment("权限 ID。"); - - b.Property("RoleId") - .HasColumnType("bigint") - .HasComment("角色 ID。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "RoleId", "PermissionId") - .IsUnique(); - - b.ToTable("role_permissions", null, t => - { - t.HasComment("角色-权限关系。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RoleTemplate", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("character varying(256)") - .HasComment("模板描述。"); - - b.Property("IsActive") - .HasColumnType("boolean") - .HasComment("是否启用。"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("模板名称。"); - - b.Property("TemplateCode") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") - .HasComment("模板编码(唯一)。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("TemplateCode") - .IsUnique(); - - b.ToTable("role_templates", null, t => - { - t.HasComment("角色模板定义(平台级)。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RoleTemplatePermission", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("PermissionCode") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") - .HasComment("权限编码。"); - - b.Property("RoleTemplateId") - .HasColumnType("bigint") - .HasComment("模板 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.HasKey("Id"); - - b.HasIndex("RoleTemplateId", "PermissionCode") - .IsUnique(); - - b.ToTable("role_template_permissions", null, t => - { - t.HasComment("角色模板-权限关系(平台级)。"); - }); - }); - - modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.UserRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint") - .HasComment("实体唯一标识。"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("创建时间(UTC)。"); - - b.Property("CreatedBy") - .HasColumnType("bigint") - .HasComment("创建人用户标识,匿名或系统操作时为 null。"); - - b.Property("DeletedAt") - .HasColumnType("timestamp with time zone") - .HasComment("软删除时间(UTC),未删除时为 null。"); - - b.Property("DeletedBy") - .HasColumnType("bigint") - .HasComment("删除人用户标识(软删除),未删除时为 null。"); - - b.Property("RoleId") - .HasColumnType("bigint") - .HasComment("角色 ID。"); - - b.Property("TenantId") - .HasColumnType("bigint") - .HasComment("所属租户 ID。"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone") - .HasComment("最近一次更新时间(UTC),从未更新时为 null。"); - - b.Property("UpdatedBy") - .HasColumnType("bigint") - .HasComment("最后更新人用户标识,匿名或系统操作时为 null。"); - - b.Property("UserId") - .HasColumnType("bigint") - .HasComment("用户 ID。"); - - b.HasKey("Id"); - - b.HasIndex("TenantId"); - - b.HasIndex("TenantId", "UserId", "RoleId") - .IsUnique(); - - b.ToTable("user_roles", null, t => - { - t.HasComment("用户-角色关系。"); - }); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.cs deleted file mode 100644 index 333e9aa..0000000 --- a/src/Infrastructure/TakeoutSaaS.Infrastructure/Migrations/IdentityDb/20251226231440_GrantIdentityUserPermissionsToSuperAdmin.cs +++ /dev/null @@ -1,135 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace TakeoutSaaS.Infrastructure.Migrations.IdentityDb -{ - /// - public partial class GrantIdentityUserPermissionsToSuperAdmin : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.Sql( - @"WITH target_roles AS ( - SELECT ""Id"" AS role_id, ""TenantId"" AS tenant_id - FROM ""roles"" - WHERE ""Code"" IN ('super-admin', 'SUPER_ADMIN', 'PlatformAdmin', 'platform-admin') - AND ""DeletedAt"" IS NULL -), - target_permissions AS ( - SELECT DISTINCT tr.tenant_id, pc.code - FROM target_roles tr - CROSS JOIN (VALUES - ('identity:user:read'), - ('identity:user:create'), - ('identity:user:update'), - ('identity:user:delete'), - ('identity:user:status'), - ('identity:user:reset-password'), - ('identity:user:batch') - ) AS pc(code) -) -INSERT INTO ""permissions"" ( - ""TenantId"", - ""Name"", - ""Code"", - ""Description"", - ""CreatedAt"", - ""CreatedBy"", - ""UpdatedAt"", - ""UpdatedBy"", - ""DeletedAt"", - ""DeletedBy"" -) -SELECT - tp.tenant_id, - tp.code, - tp.code, - CONCAT('Seed permission ', tp.code), - NOW(), - NULL, - NULL, - NULL, - NULL, - NULL -FROM target_permissions tp -ON CONFLICT (""TenantId"", ""Code"") DO NOTHING;" - ); - migrationBuilder.Sql( - @"WITH target_roles AS ( - SELECT ""Id"" AS role_id, ""TenantId"" AS tenant_id - FROM ""roles"" - WHERE ""Code"" IN ('super-admin', 'SUPER_ADMIN', 'PlatformAdmin', 'platform-admin') - AND ""DeletedAt"" IS NULL -) -INSERT INTO ""role_permissions"" ( - ""TenantId"", - ""RoleId"", - ""PermissionId"", - ""CreatedAt"", - ""CreatedBy"", - ""UpdatedAt"", - ""UpdatedBy"", - ""DeletedAt"", - ""DeletedBy"" -) -SELECT - tr.tenant_id, - tr.role_id, - p.""Id"", - NOW(), - NULL, - NULL, - NULL, - NULL, - NULL -FROM target_roles tr -JOIN ""permissions"" p - ON p.""TenantId"" = tr.tenant_id - AND p.""Code"" IN ( - 'identity:user:read', - 'identity:user:create', - 'identity:user:update', - 'identity:user:delete', - 'identity:user:status', - 'identity:user:reset-password', - 'identity:user:batch' - ) -WHERE p.""DeletedAt"" IS NULL -ON CONFLICT (""TenantId"", ""RoleId"", ""PermissionId"") DO NOTHING;" - ); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.Sql( - @"WITH target_roles AS ( - SELECT ""Id"" AS role_id, ""TenantId"" AS tenant_id - FROM ""roles"" - WHERE ""Code"" IN ('super-admin', 'SUPER_ADMIN', 'PlatformAdmin', 'platform-admin') - AND ""DeletedAt"" IS NULL -), - target_permissions AS ( - SELECT ""Id"" AS permission_id, ""TenantId"" AS tenant_id - FROM ""permissions"" - WHERE ""Code"" IN ( - 'identity:user:read', - 'identity:user:create', - 'identity:user:update', - 'identity:user:delete', - 'identity:user:status', - 'identity:user:reset-password', - 'identity:user:batch' - ) -) -DELETE FROM ""role_permissions"" rp -USING target_roles tr, target_permissions tp -WHERE rp.""TenantId"" = tr.tenant_id - AND rp.""RoleId"" = tr.role_id - AND rp.""PermissionId"" = tp.permission_id;" - ); - } - } -}