Add native permission-aware file search source

This commit is contained in:
2026-08-04 03:03:26 +02:00
parent 7e6be4b017
commit 8ec31b16ee
3 changed files with 504 additions and 1 deletions
+32 -1
View File
@@ -35,6 +35,7 @@ from govoplan_core.core.provider_governance import (
ProviderObjectDeclaration,
declared_module_architecture,
)
from govoplan_core.core.search import SearchSourceProviderRegistration
from govoplan_core.core.views import ViewSurface
from govoplan_core.db.base import Base
from govoplan_files.backend.change_tracking import register_files_change_tracking
@@ -44,6 +45,7 @@ from govoplan_files.backend.provider_state import (
REMOTE_STORAGE_PROVIDER_ID,
remote_storage_provider_states,
)
from govoplan_files.backend.search_source import create_files_search_source
register_files_change_tracking()
@@ -279,7 +281,7 @@ manifest = ModuleManifest(
name="Files",
version="0.1.9",
required_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR),
optional_dependencies=("campaigns", "encryption"),
optional_dependencies=("campaigns", "encryption", "search"),
provides_interfaces=(
ModuleInterfaceProvider(name="files.access", version="0.1.6"),
ModuleInterfaceProvider(name="files.campaign_attachments", version="0.1.6"),
@@ -298,12 +300,24 @@ manifest = ModuleManifest(
version_max_exclusive="2.0.0",
optional=True,
),
ModuleInterfaceRequirement(
name="search.source",
version_min="1.0.0",
version_max_exclusive="2.0.0",
optional=True,
),
),
permissions=PERMISSIONS,
route_factory=_files_router,
role_templates=ROLE_TEMPLATES,
tenant_summary_providers=(_tenant_summary,),
tenant_summary_batch_providers=(_tenant_summary_batch,),
search_sources=(
SearchSourceProviderRegistration(
id="files.objects",
factory=create_files_search_source,
),
),
delete_veto_providers={"group": (_veto_group_delete,)},
nav_items=(NavItem(path="/files", label="Files", icon="folder", required_any=("files:file:read",), order=40),),
frontend=FrontendModule(
@@ -329,6 +343,23 @@ manifest = ModuleManifest(
),
),
documentation=(
DocumentationTopic(
id="files.search.managed-content",
title="Search managed files and folders",
summary="Expose file names, logical paths, and descriptions to permission-aware platform Search.",
body=(
"When Search is installed, Files contributes managed files and folders to its derived index. "
"Every result is tenant-bounded and rechecks current ownership, group membership, direct shares, "
"expiry, revocation, deletion, and Files permissions before it is returned. Committed file and "
"share changes are delivered through the platform event outbox; an administrator can rebuild the "
"derived index without changing authoritative Files data."
),
layer="configured",
documentation_types=("admin", "user"),
audience=("file_user", "file_manager", "administrator"),
related_modules=("search",),
order=41,
),
DocumentationTopic(
id="files.workflow.organize-managed-files",
title="Organize managed files and folders",