Harden auth and security controls with session auth and docs
This commit is contained in:
@@ -4,7 +4,8 @@ from fastapi import APIRouter, Depends, Query
|
||||
from sqlalchemy import Text, cast, func, select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.api.routes_documents import _apply_discovery_filters
|
||||
from app.api.auth import AuthContext, require_user_or_admin
|
||||
from app.api.routes_documents import _apply_discovery_filters, _scope_document_statement_for_auth_context
|
||||
from app.db.base import get_session
|
||||
from app.models.document import Document, DocumentStatus
|
||||
from app.schemas.documents import DocumentResponse, SearchResponse
|
||||
@@ -25,6 +26,7 @@ def search_documents(
|
||||
type_filter: str | None = Query(default=None),
|
||||
processed_from: str | None = Query(default=None),
|
||||
processed_to: str | None = Query(default=None),
|
||||
auth_context: AuthContext = Depends(require_user_or_admin),
|
||||
session: Session = Depends(get_session),
|
||||
) -> SearchResponse:
|
||||
"""Searches documents using PostgreSQL full-text ranking plus metadata matching."""
|
||||
@@ -50,6 +52,7 @@ def search_documents(
|
||||
)
|
||||
|
||||
statement = select(Document).where(search_filter)
|
||||
statement = _scope_document_statement_for_auth_context(statement, auth_context)
|
||||
if only_trashed:
|
||||
statement = statement.where(Document.status == DocumentStatus.TRASHED)
|
||||
elif not include_trashed:
|
||||
@@ -67,6 +70,7 @@ def search_documents(
|
||||
items = session.execute(statement).scalars().all()
|
||||
|
||||
count_statement = select(func.count(Document.id)).where(search_filter)
|
||||
count_statement = _scope_document_statement_for_auth_context(count_statement, auth_context)
|
||||
if only_trashed:
|
||||
count_statement = count_statement.where(Document.status == DocumentStatus.TRASHED)
|
||||
elif not include_trashed:
|
||||
|
||||
Reference in New Issue
Block a user