17 Commits

Author SHA1 Message Date
7bea6f2deb feat: MNG → DEV 자동 로그인 API 구현
- login_tokens 테이블 마이그레이션 생성
- LoginToken 모델 생성 (One-Time Token 관리)
- POST /api/v1/token-login 엔드포인트 추가
- 토큰 검증 후 access_token 발급, 1회용 토큰 삭제

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-20 13:43:04 +09:00
993b347fb7 feat: 로그인 시 아이디 또는 이메일로 인증 가능하도록 개선
- 입력값이 이메일 형식이면 email 컬럼으로 조회
- 아이디 형식이면 user_id 컬럼으로 조회
- filter_var(FILTER_VALIDATE_EMAIL) 사용

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 12:46:30 +09:00
fdef567863 feat: 로그인 API에 roles 정보 추가
- MemberService::getUserInfoForLogin(): 사용자 역할 조회 로직 추가
- ApiController::login(): 응답에 roles 포함
- AuthApi (Swagger): roles 응답 스키마 추가
- 로그인 시 해당 회원의 역할 목록 반환 (id, name, description)

fix: 회원가입 시 UserTenant 생성 누락으로 인한 로그인 실패 수정

근본 원인:
- RegisterService는 TenantUserProfile만 생성
- MemberService::getUserInfoForLogin()은 UserTenant 조회
- 회원가입 직후 로그인 시 테넌트 조회 실패 (userTenants->isEmpty() = true)

해결 방안:
- RegisterService에 UserTenant::create() 추가
- TenantUserProfile: 프로필 정보 (부서, 직급 등)
- UserTenant: 접근 권한 관리 (is_active, is_default, joined_at)

영향도:
- 신규 사용자: 로그인 가능하게 수정
- 기존 사용자: 영향 없음 (user_tenants 데이터 이미 존재)

fix: 로그인 시 테넌트 없는 경우 roles 누락 오류 수정

- MemberService::getUserInfoForLogin(): 테넌트가 없는 경우에도 roles 빈 배열 반환
- Undefined array key 'roles' 에러 해결

MemberService.php 권한 조회 로직 수정 - 역할 기반 권한 지원

[문제]
- 회원가입 후 로그인 시 메뉴 리스트가 표시되지 않음
- RegisterService에서 역할에 권한 할당(role_has_permissions)하고
  사용자에게 역할 부여(model_has_roles)
- 하지만 MemberService는 model_has_permissions(직접 사용자 권한)만 조회

[원인]
- Spatie Permission 아키텍처 불일치
- 권한이 역할에 저장되었으나 직접 사용자 권한 테이블만 조회

[해결]
- model_has_roles → role_has_permissions → permissions 조인 쿼리로 변경
- UNION으로 직접 권한(model_has_permissions)도 지원하는 하이브리드 방식
- 역할 기반 권한과 직접 권한 모두 조회 가능

[변경 파일]
- app/Services/MemberService.php (getUserInfoForLogin 메서드, 239-259줄)
2025-11-11 10:56:39 +09:00
798d5149ea feat: API 토큰 관리 시스템 구현 (액세스/리프레시 토큰 분리)
- AuthService: 토큰 발급/갱신 통합 관리
- RefreshController: POST /api/v1/refresh 엔드포인트 추가
- 액세스 토큰 2시간, 리프레시 토큰 7일 (.env 설정)
- TOKEN_EXPIRED 에러 코드로 프론트엔드 자동 리프레시 지원
- 리프레시 토큰 일회성 사용 (보안 강화)
- Swagger 문서 Auth 태그로 통합
2025-11-10 11:17:32 +09:00
410a78d336 feat: 로그인 응답에 사용자/테넌트/메뉴 정보 추가
- MemberService::getUserInfoForLogin() 메서드 추가
  - 사용자 기본 정보 (id, user_id, name, email, phone)
  - 활성 테넌트 정보 (is_default 우선 → is_active 차순)
  - 테넌트 없는 경우 null 반환
  - 추가 테넌트 목록 (other_tenants 배열)
  - 권한 기반 메뉴 필터링 (menu:{id}.view)

- 권한 체크 3단계
  - 기본 Role 권한 (model_has_permissions)
  - Override 권한 (permission_overrides, 시간 제약)
  - 우선순위: deny(-1) > allow(1) > base permission

- ApiController::login() 응답 구조 변경
  - 기존: {message, user_token}
  - 개선: {message, user_token, user, tenant, menus}

- Swagger 문서 업데이트 (AuthApi.php)
  - 테넌트 있는 경우 응답 스키마
  - 테넌트 없는 경우 응답 스키마 (null)
  - 에러 케이스 추가 (400, 401, 404)
2025-11-06 19:54:08 +09:00
cc206fdbed style: Laravel Pint 코드 포맷팅 적용
- PSR-12 스타일 가이드 준수
- 302개 파일 스타일 이슈 자동 수정
- 코드 로직 변경 없음 (포맷팅만)
2025-11-06 17:45:49 +09:00
3741dba27b refactor : 불필요한 소스 정리 및 수정 2025-08-20 17:01:32 +09:00
00569cf4be fix : Auth - 회원가입 추가 2025-08-18 16:37:02 +09:00
a1916e8e50 fix : swagger문서파일 분리 2025-08-04 08:35:35 +09:00
7d607471b8 Revert "fix : User 모델 경로 오류로 인해 User 모델만 밖으로 이동"
This reverts commit 2b82483f64.
2025-07-29 16:04:28 +09:00
2b82483f64 fix : User 모델 경로 오류로 인해 User 모델만 밖으로 이동 2025-07-29 13:33:07 +09:00
1942f51cf7 fix : 모델 경로 수정 2025-07-29 13:00:25 +09:00
c9f4e27ad1 fix : 로그아웃 기능 수정 2025-07-28 11:44:07 +09:00
8a4a7c9508 fix : Member 모델에서 User 모델로 변경 2025-07-26 14:23:13 +09:00
97b7cd4e07 feat : API - 링크 오류 및 BearerAuth 인증 오류 수정 2025-07-24 09:20:39 +09:00
4c2ce55afb fix : Bearer 인증 기능 수정 (추가) 2025-07-22 16:44:26 +09:00
40fca3295e fix : API Version 관리 추가 - 초기에는 v1으로 개발
(cherry picked from commit 09bf8ac599)
2025-07-20 02:12:21 +09:00