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;"
- );
- }
- }
-}