Files
dify/api/core/app/file_access/scope.py
-LAN- 56593f20b0 refactor(api): continue decoupling dify_graph from API concerns (#33580)
Signed-off-by: -LAN- <laipz8200@outlook.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: WH-2099 <wh2099@pm.me>
2026-03-25 20:32:24 +08:00

41 lines
1.0 KiB
Python

from __future__ import annotations
from collections.abc import Iterator
from contextlib import contextmanager
from contextvars import ContextVar
from dataclasses import dataclass
from core.app.entities.app_invoke_entities import InvokeFrom, UserFrom
_current_file_access_scope: ContextVar[FileAccessScope | None] = ContextVar(
"current_file_access_scope",
default=None,
)
@dataclass(frozen=True, slots=True)
class FileAccessScope:
"""Request-scoped ownership context used by workflow-layer file lookups."""
tenant_id: str
user_id: str
user_from: UserFrom
invoke_from: InvokeFrom
@property
def requires_user_ownership(self) -> bool:
return self.user_from == UserFrom.END_USER
def get_current_file_access_scope() -> FileAccessScope | None:
return _current_file_access_scope.get()
@contextmanager
def bind_file_access_scope(scope: FileAccessScope) -> Iterator[None]:
token = _current_file_access_scope.set(scope)
try:
yield
finally:
_current_file_access_scope.reset(token)