Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added 192/app/__init__.py
Empty file.
Empty file added 192/app/api/__init__.py
Empty file.
10 changes: 10 additions & 0 deletions 192/app/api/upload.py
Original file line number Diff line number Diff line change
@@ -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}

Empty file added 192/app/core/__init__.py
Empty file.
18 changes: 18 additions & 0 deletions 192/app/core/security.py
Original file line number Diff line number Diff line change
@@ -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


6 changes: 6 additions & 0 deletions 192/app/main.py
Original file line number Diff line number Diff line change
@@ -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)
6 changes: 6 additions & 0 deletions 192/requirments.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
fastapi
uvicorn
pip-audit
python-multipart
requests
setuptools