Coverage for open_webui/utils/access_control/folders.py: 35%
18 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
1from open_webui.models.access_grants import AccessGrants
2from open_webui.models.folders import FolderModel, Folders
3from sqlalchemy.ext.asyncio import AsyncSession
6async def has_folder_access(user_id: str, folder: FolderModel, permission: str, db: AsyncSession | None) -> bool:
7 """Check if user has access to folder directly or via ancestor inheritance."""
8 # A corrupt parent loop must not spin forever
9 seen_ids = set()
10 while folder and folder.id not in seen_ids:
11 seen_ids.add(folder.id)
13 if folder.user_id == user_id:
14 return True
16 if await AccessGrants.has_access(
17 user_id=user_id,
18 resource_type='folder',
19 resource_id=folder.id,
20 permission=permission,
21 db=db,
22 ):
23 return True
25 folder = await Folders.get_folder_by_id(folder.parent_id, db=db) if folder.parent_id else None
26 return False
29async def has_folder_write_access(user_id: str, folder_id: str, db: AsyncSession | None = None) -> bool:
30 """Check write access on the folder with this id; False if no such folder exists."""
31 folder = await Folders.get_folder_by_id(folder_id, db=db)
32 if not folder: 32 ↛ 34line 32 didn't jump to line 34 because the condition on line 32 was always true
33 return False
34 return await has_folder_access(user_id, folder, 'write', db)