diff --git a/src/Api/TakeoutSaaS.TenantApi/Controllers/AuthController.cs b/src/Api/TakeoutSaaS.TenantApi/Controllers/AuthController.cs
index 223e8d7..7560b56 100644
--- a/src/Api/TakeoutSaaS.TenantApi/Controllers/AuthController.cs
+++ b/src/Api/TakeoutSaaS.TenantApi/Controllers/AuthController.cs
@@ -68,6 +68,7 @@ public sealed class AuthController(IAdminAuthService authService) : BaseApiContr
/// "account": "admin",
/// "displayName": "租户管理员",
/// "tenantId": "100000000000000001",
+ /// "packageName": "标准版",
/// "roles": ["tenant-admin"],
/// "permissions": ["identity:profile:read", "merchant:read"]
/// }
diff --git a/src/Application/TakeoutSaaS.Application/Identity/Contracts/CurrentUserProfile.cs b/src/Application/TakeoutSaaS.Application/Identity/Contracts/CurrentUserProfile.cs
index 995efe2..c3d141f 100644
--- a/src/Application/TakeoutSaaS.Application/Identity/Contracts/CurrentUserProfile.cs
+++ b/src/Application/TakeoutSaaS.Application/Identity/Contracts/CurrentUserProfile.cs
@@ -44,4 +44,9 @@ public sealed class CurrentUserProfile
/// 头像地址(可选)。
///
public string? Avatar { get; init; }
+
+ ///
+ /// 当前订阅套餐名称(可选)。
+ ///
+ public string? PackageName { get; init; }
}
diff --git a/src/Application/TakeoutSaaS.Application/Identity/Services/AdminAuthService.cs b/src/Application/TakeoutSaaS.Application/Identity/Services/AdminAuthService.cs
index b803c4f..3ed508a 100644
--- a/src/Application/TakeoutSaaS.Application/Identity/Services/AdminAuthService.cs
+++ b/src/Application/TakeoutSaaS.Application/Identity/Services/AdminAuthService.cs
@@ -4,6 +4,7 @@ using TakeoutSaaS.Application.Identity.Contracts;
using TakeoutSaaS.Domain.Identity.Entities;
using TakeoutSaaS.Domain.Identity.Enums;
using TakeoutSaaS.Domain.Identity.Repositories;
+using TakeoutSaaS.Domain.Tenants.Repositories;
using TakeoutSaaS.Shared.Abstractions.Constants;
using TakeoutSaaS.Shared.Abstractions.Exceptions;
using TakeoutSaaS.Shared.Abstractions.Results;
@@ -21,6 +22,8 @@ public sealed class AdminAuthService(
IPermissionRepository permissionRepository,
IRolePermissionRepository rolePermissionRepository,
IMenuRepository menuRepository,
+ ITenantRepository tenantRepository,
+ ITenantPackageRepository tenantPackageRepository,
IPasswordHasher passwordHasher,
IJwtTokenService jwtTokenService,
IRefreshTokenStore refreshTokenStore,
@@ -229,12 +232,20 @@ public sealed class AdminAuthService(
private async Task BuildProfileAsync(IdentityUser user, CancellationToken cancellationToken)
{
+ // 1. 读取用户角色
var tenantId = user.TenantId;
var roles = await ResolveUserRolesAsync(tenantId, user.Id, cancellationToken);
- // 1. 强制仅允许租户管理员登录(不支持超级管理员)
+
+ // 2. 强制仅允许租户管理员登录(不支持超级管理员)
EnsureTenantAdmin(tenantId, roles);
- // 2. 加载权限并返回档案
+
+ // 3. 加载权限
var permissions = await ResolveUserPermissionsAsync(tenantId, user.Id, cancellationToken);
+
+ // 4. 读取当前套餐名称(严格以数据库为准)
+ var packageName = await ResolveTenantPackageNameAsync(tenantId, cancellationToken);
+
+ // 5. 返回用户档案
return new CurrentUserProfile
{
UserId = user.Id,
@@ -244,10 +255,31 @@ public sealed class AdminAuthService(
MerchantId = user.MerchantId,
Roles = roles,
Permissions = permissions,
- Avatar = user.Avatar
+ Avatar = user.Avatar,
+ PackageName = packageName
};
}
+ private async Task ResolveTenantPackageNameAsync(long tenantId, CancellationToken cancellationToken)
+ {
+ // 1. 查询当前有效订阅
+ var subscription = await tenantRepository.GetActiveSubscriptionAsync(tenantId, cancellationToken);
+ if (subscription == null)
+ {
+ return null;
+ }
+
+ // 2. 查询订阅关联套餐
+ var package = await tenantPackageRepository.FindByIdAsync(subscription.TenantPackageId, cancellationToken);
+ if (package == null)
+ {
+ return null;
+ }
+
+ // 3. 返回套餐名称
+ return package.Name;
+ }
+
private void EnsureTenantMatched(long userTenantId)
{
// 1. 读取当前租户