From 8f9ecf0231fbccd2463abaeab6b23c30ef3ce1ff Mon Sep 17 00:00:00 2001 From: Mohammad Reza Date: Fri, 6 Feb 2026 18:29:08 +0330 Subject: [PATCH] Solved issue #192 --- 192/app/__init__.py | 0 192/app/api/__init__.py | 0 192/app/api/upload.py | 10 ++++++++++ 192/app/core/__init__.py | 0 192/app/core/security.py | 18 ++++++++++++++++++ 192/app/main.py | 6 ++++++ 192/requirments.txt | 6 ++++++ 7 files changed, 40 insertions(+) create mode 100644 192/app/__init__.py create mode 100644 192/app/api/__init__.py create mode 100644 192/app/api/upload.py create mode 100644 192/app/core/__init__.py create mode 100644 192/app/core/security.py create mode 100644 192/app/main.py create mode 100644 192/requirments.txt diff --git a/192/app/__init__.py b/192/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/192/app/api/__init__.py b/192/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/192/app/api/upload.py b/192/app/api/upload.py new file mode 100644 index 0000000..16095ca --- /dev/null +++ b/192/app/api/upload.py @@ -0,0 +1,10 @@ +from fastapi import APIRouter, UploadFile, Depends +from app.core.security import require_roles + +router = APIRouter() + + +@router.post("/up") +def upload_file(file: UploadFile, role: str = Depends(require_roles("admin", "writer"))): + return {"message": "File uploaded successfully", "role": role} + diff --git a/192/app/core/__init__.py b/192/app/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/192/app/core/security.py b/192/app/core/security.py new file mode 100644 index 0000000..8625da6 --- /dev/null +++ b/192/app/core/security.py @@ -0,0 +1,18 @@ +from fastapi import Header, HTTPException, status, Depends + + +def get_current_role(x_role: str = Header(...)): + return x_role + + +def require_roles(*allowed_roles): + def role_checker(role: str = Depends(get_current_role)): + if role not in allowed_roles: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="Access denied: role mismatch" + ) + return role + return role_checker + + diff --git a/192/app/main.py b/192/app/main.py new file mode 100644 index 0000000..9a72765 --- /dev/null +++ b/192/app/main.py @@ -0,0 +1,6 @@ +from fastapi import FastAPI +from app.api.upload import router # مسیر به فایل های api + +app = FastAPI(title="SmartProposal Task 192") + +app.include_router(router) diff --git a/192/requirments.txt b/192/requirments.txt new file mode 100644 index 0000000..324bb81 --- /dev/null +++ b/192/requirments.txt @@ -0,0 +1,6 @@ +fastapi +uvicorn +pip-audit +python-multipart +requests +setuptools \ No newline at end of file