From 5aad97302873f39dd003c4c0f548788af3702df3 Mon Sep 17 00:00:00 2001 From: hyungi Date: Mon, 27 Oct 2025 08:01:55 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B6=8C=ED=95=9C=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PagePermissionResponse 스키마의 granted_at 필드 타입 수정 * str → Optional[datetime]으로 변경 * Pydantic ResponseValidationError 해결 - datetime import 추가 - 사용자 권한 설정 저장 기능 정상화 --- .../page_permissions.cpython-311.pyc | Bin 14385 -> 14479 bytes backend/routers/page_permissions.py | 5 +++-- nginx/nginx.conf | 19 +++++++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/backend/routers/__pycache__/page_permissions.cpython-311.pyc b/backend/routers/__pycache__/page_permissions.cpython-311.pyc index 179afc9ed243fdfa64c781e5c845bf4e65cf4227..28b228b088679b23c89c13a53eb5ef2b9ec5972b 100644 GIT binary patch delta 3217 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 a!+oIr$lsnKZ9NaA9sf#rx@5J+V8TDSeNONI diff --git a/backend/routers/page_permissions.py b/backend/routers/page_permissions.py index b5159ab..37f3e92 100644 --- a/backend/routers/page_permissions.py +++ b/backend/routers/page_permissions.py @@ -6,7 +6,8 @@ from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List, Optional -from pydantic import BaseModel +from pydantic import BaseModel, Field +from datetime import datetime from database.database import get_db from database.models import User, UserPagePermission, UserRole @@ -27,7 +28,7 @@ class PagePermissionResponse(BaseModel): page_name: str can_access: bool granted_by_id: Optional[int] - granted_at: str + granted_at: Optional[datetime] notes: Optional[str] class Config: diff --git a/nginx/nginx.conf b/nginx/nginx.conf index bc0b3e1..6bdb326 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -17,7 +17,24 @@ http { listen 80; server_name localhost; - # 경기도 IP 대역만 허용 (주요 ISP) + # 클라우드플레어 IP 대역 허용 + allow 173.245.48.0/20; + allow 103.21.244.0/22; + allow 103.22.200.0/22; + allow 103.31.4.0/22; + allow 141.101.64.0/18; + allow 108.162.192.0/18; + allow 190.93.240.0/20; + allow 188.114.96.0/20; + allow 197.234.240.0/22; + allow 198.41.128.0/17; + allow 162.158.0.0/15; + allow 104.16.0.0/13; + allow 104.24.0.0/14; + allow 172.64.0.0/13; + allow 131.0.72.0/22; + + # 경기도 IP 대역 허용 (주요 ISP) allow 211.0.0.0/8; # KT allow 175.0.0.0/8; # KT allow 121.0.0.0/8; # SK브로드밴드