기능 추가 — 옵저버 계정 및 현황 조회 포털

읽기 전용 옵저버 역할 추가. 신고 현황 확인만 가능하며 모든 쓰기 동작 차단.

- auth.py: require_viewer(admin+observer) 의존성 추가
- auth_router.py: register 엔드포인트에 role 파라미터 추가 (mechanic/observer)
- login.html: 회원가입 시 정비사/옵저버 역할 카드 선택 UI, 역할별 안내문구
- 로그인 후 observer → /pages/observer/dashboard.html 라우팅
- observer/dashboard.html: 통계 카드(상태별 건수) + 신고 현황 테이블(읽기전용)
- observer/reports.html: 상태·충전기ID·충전소명 필터 신고 목록
- accounts.html: 옵저버 필터·생성·승인 대기 역할 표시 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
byun
2026-06-01 15:25:47 +09:00
parent 81c3428aa1
commit 124ad0d165
7 changed files with 274 additions and 7 deletions

View File

@@ -84,6 +84,7 @@ def require_role(*roles):
return current_user
return checker
require_admin = require_role("admin")
require_mechanic = require_role("mechanic", "admin")
require_admin = require_role("admin")
require_mechanic = require_role("mechanic", "admin")
require_manufacturer = require_role("manufacturer", "admin")
require_viewer = require_role("admin", "observer") # 읽기 전용 역할 포함

View File

@@ -35,14 +35,17 @@ def register(
name: str = Form(...),
phone: str = Form(""),
company: str = Form(""),
role: str = Form("mechanic"), # mechanic | observer
db: Session = Depends(get_db)
):
if role not in ("mechanic", "observer"):
role = "mechanic"
if db.query(models.User).filter_by(username=username).first():
raise HTTPException(400, "이미 사용 중인 아이디입니다.")
user = models.User(
username=username,
password_hash=hash_password(password),
role="mechanic",
role=role,
name=name,
phone=phone or None,
company=company or None,