initial commit after split

This commit is contained in:
2026-06-24 01:43:16 +02:00
parent bbd6ff4f61
commit 0db662380b
42 changed files with 7028 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
from __future__ import annotations
from pathlib import Path
from govoplan_core.core.modules import FrontendModule, MigrationSpec, ModuleContext, ModuleManifest, NavItem, PermissionDefinition, RoleTemplate
from govoplan_core.db.base import Base
from govoplan_files.backend.db import models as file_models # noqa: F401 - populate Files ORM metadata
def _permission(scope: str, label: str, description: str) -> PermissionDefinition:
module_id, resource, action = scope.split(":", 2)
return PermissionDefinition(
scope=scope,
label=label,
description=description,
category="Files",
level="tenant",
module_id=module_id,
resource=resource,
action=action,
)
PERMISSIONS = (
_permission("files:file:read", "View files", "List, search and preview managed files."),
_permission("files:file:download", "Download files", "Download managed files and generated archives."),
_permission("files:file:upload", "Upload files", "Upload new managed file versions."),
_permission("files:file:organize", "Organize files", "Create folders, rename, move or copy managed files."),
_permission("files:file:share", "Share files", "Grant or revoke managed file shares."),
_permission("files:file:delete", "Delete files", "Delete or hide managed files and folders where policy allows it."),
_permission("files:file:admin", "Administer file spaces", "Administer all file spaces in the tenant."),
)
ROLE_TEMPLATES = (
RoleTemplate(
slug="file_manager",
name="File manager",
description="Manage tenant file spaces without campaign delivery rights.",
permissions=(
"files:file:read",
"files:file:download",
"files:file:upload",
"files:file:organize",
"files:file:share",
"files:file:delete",
),
),
RoleTemplate(
slug="file_viewer",
name="File viewer",
description="Read and download permitted files.",
permissions=("files:file:read", "files:file:download"),
),
)
def _files_router(context: ModuleContext):
from govoplan_files.backend.runtime import configure_runtime
configure_runtime(settings=context.settings)
from govoplan_files.backend.router import router
return router
manifest = ModuleManifest(
id="files",
name="Files",
version="1.0.0",
dependencies=("access",),
optional_dependencies=(),
permissions=PERMISSIONS,
route_factory=_files_router,
role_templates=ROLE_TEMPLATES,
nav_items=(NavItem(path="/files", label="Files", icon="folder", required_any=("files:file:read",), order=40),),
frontend=FrontendModule(
module_id="files",
package_name="@govoplan/files-webui",
nav_items=(NavItem(path="/files", label="Files", icon="folder", required_any=("files:file:read",), order=40),),
),
migration_spec=MigrationSpec(
module_id="files",
metadata=Base.metadata,
script_location=str(Path(__file__).with_name("migrations") / "versions"),
),
)
def get_manifest() -> ModuleManifest:
return manifest