package com.baiyue.common.security; import java.security.Principal; import java.util.Set; /** * 统一认证用户主体,携带用户、租户、成员身份、应用端、客户端类型及权限信息。 */ public record AuthenticatedUser(Long userId, Long tenantId, Long operatorTenantId, Long membershipId, String username, String displayName, String appCode, String clientType, Set permissions, boolean impersonated, Long actorUserId, Long actorMembershipId, boolean passwordChangeRequired, Long overseasWarehouseId) implements Principal { public AuthenticatedUser(Long userId, Long tenantId, Long operatorTenantId, Long membershipId, String username, String appCode, String clientType, Set permissions) { this(userId, tenantId, operatorTenantId, membershipId, username, null, appCode, clientType, permissions, false, null, null, false, null); } public AuthenticatedUser(Long userId, Long tenantId, Long operatorTenantId, Long membershipId, String username, String appCode, String clientType, Set permissions, boolean impersonated, Long actorUserId, Long actorMembershipId, boolean passwordChangeRequired) { this(userId, tenantId, operatorTenantId, membershipId, username, null, appCode, clientType, permissions, impersonated, actorUserId, actorMembershipId, passwordChangeRequired, null); } public AuthenticatedUser(Long userId, Long tenantId, Long operatorTenantId, Long membershipId, String username, String displayName, String appCode, String clientType, Set permissions, boolean impersonated, Long actorUserId, Long actorMembershipId, boolean passwordChangeRequired) { this(userId, tenantId, operatorTenantId, membershipId, username, displayName, appCode, clientType, permissions, impersonated, actorUserId, actorMembershipId, passwordChangeRequired, null); } public AuthenticatedUser(Long userId, Long tenantId, Long operatorTenantId, Long membershipId, String username, String appCode, String clientType, Set permissions, boolean impersonated, Long actorUserId, Long actorMembershipId, boolean passwordChangeRequired, Long overseasWarehouseId) { this(userId, tenantId, operatorTenantId, membershipId, username, null, appCode, clientType, permissions, impersonated, actorUserId, actorMembershipId, passwordChangeRequired, overseasWarehouseId); } public AuthenticatedUser { permissions = permissions == null ? Set.of() : Set.copyOf(permissions); } @Override public String getName() { return username; } }