refac: owner-bind ephemeral web-search RAG collections (#26706)
The web-search-* namespace was the one collection namespace filter_accessible_collections admitted unconditionally for any non-admin user, on both read and write, unlike file-*, user-memory-* and knowledge bases which are owner-scoped. process_web_search now mints these ephemeral per-query collections as web-search-{user.id}-<hash>, and the access helper only admits web-search-{requester.id}-* names, so a web-search collection is readable and writable only by the user who created it (admins keep their bypass). The collections hold transient public web-search results and their names are non-enumerable query hashes, so there was no demonstrated cross-user access path; this removes the namespace exception so the per-user scoping the other namespaces enforce also covers web-search.
Co-authored-by: rexpository <rexpository@users.noreply.github.com>
This commit is contained in:
co-authored by
rexpository
parent
3a9b9a1a74
commit
6d4c02a89e
@@ -2657,7 +2657,8 @@ async def process_web_search(request: Request, form_data: SearchForm, user=Depen
|
||||
}
|
||||
else:
|
||||
# Create a single collection for all documents
|
||||
collection_name = f'web-search-{calculate_sha256_string("-".join(form_data.queries))}'[:63]
|
||||
# Bind the ephemeral collection to its owner so filter_accessible_collections can scope it per-user.
|
||||
collection_name = f'web-search-{user.id}-{calculate_sha256_string("-".join(form_data.queries))}'[:63]
|
||||
|
||||
try:
|
||||
await run_in_threadpool(
|
||||
|
||||
Reference in New Issue
Block a user