6256d3e63d
CI / build (push) Failing after 13m40s
- member.plan(FREE/PREMIUM) 컬럼 추가 + SessionUser/MemberResponse 노출
- auth_session 백업에 plan 저장(세션 복원 시 유료 상태 유지)
- 관리자 회원 plan 변경 API (PUT /api/admin/members/{id}/plan)
- PremiumInterceptor 로 유료 전용 경로 차단(통계/예산/고정지출/태그/OCR/투자/카드알림/백업)
· 관리자는 플랜과 무관하게 허용, 무료 회원은 403 PREMIUM_REQUIRED
- WebConfigTest: 유료 경로 등록 회귀 가드 추가
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
57 lines
1.5 KiB
Java
57 lines
1.5 KiB
Java
package com.sb.web.auth.domain;
|
|
|
|
import com.sb.web.auth.dto.SessionUser;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.Builder;
|
|
import lombok.Data;
|
|
import lombok.NoArgsConstructor;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
/**
|
|
* 세션 영속 백업(auth_session). Redis 유실 시 여기서 SessionUser 를 복원한다.
|
|
*/
|
|
@Data
|
|
@Builder
|
|
@NoArgsConstructor
|
|
@AllArgsConstructor
|
|
public class AuthSession {
|
|
|
|
private String token;
|
|
private Long memberId;
|
|
private String loginId;
|
|
private String name;
|
|
private String role;
|
|
private String plan;
|
|
private String provider;
|
|
private boolean rememberMe;
|
|
private LocalDateTime expiresAt;
|
|
private LocalDateTime createdAt;
|
|
|
|
public static AuthSession of(String token, SessionUser u, LocalDateTime expiresAt) {
|
|
return AuthSession.builder()
|
|
.token(token)
|
|
.memberId(u.getId())
|
|
.loginId(u.getLoginId())
|
|
.name(u.getName())
|
|
.role(u.getRole())
|
|
.plan(u.getPlan())
|
|
.provider(u.getProvider())
|
|
.rememberMe(u.isRememberMe())
|
|
.expiresAt(expiresAt)
|
|
.build();
|
|
}
|
|
|
|
public SessionUser toSessionUser() {
|
|
return SessionUser.builder()
|
|
.id(memberId)
|
|
.loginId(loginId)
|
|
.name(name)
|
|
.role(role)
|
|
.plan(plan)
|
|
.provider(provider)
|
|
.rememberMe(rememberMe)
|
|
.build();
|
|
}
|
|
}
|