mirror of
https://github.com/open-webui/open-webui.git
synced 2026-10-10 03:27:57 +00:00
refac
This commit is contained in:
parent
eea090805a
commit
ce18eca340
4 changed files with 13 additions and 8 deletions
|
|
@ -166,13 +166,14 @@ class FolderTable:
|
|||
self, user_id: str, user_group_ids: set[str], db: Optional[AsyncSession] = None
|
||||
) -> dict[str, str]:
|
||||
"""
|
||||
Returns {folder_id: highest_permission} for all folders shared with user.
|
||||
Returns {folder_id: highest_permission} for folders shared with or by user.
|
||||
Checks direct user grants, group grants, and public (user:*) grants.
|
||||
"""
|
||||
from open_webui.models.access_grants import AccessGrant
|
||||
|
||||
async with get_async_db_context(db) as db:
|
||||
conditions = [
|
||||
AccessGrant.resource_id.in_(select(Folder.id).where(Folder.user_id == user_id)),
|
||||
and_(AccessGrant.principal_type == 'user', AccessGrant.principal_id == '*'),
|
||||
and_(AccessGrant.principal_type == 'user', AccessGrant.principal_id == user_id),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -245,15 +245,14 @@ async def get_shared_folders(
|
|||
user=Depends(get_verified_user),
|
||||
db: AsyncSession = Depends(get_async_session),
|
||||
):
|
||||
"""Get all folders shared with the current user (not owned by them)."""
|
||||
"""Get folders shared with or by the current user."""
|
||||
await check_folders_permission(request, user, db=db)
|
||||
groups = await Groups.get_groups_by_member_id(user.id, db=db, include_inherited=True)
|
||||
group_ids = {g.id for g in groups}
|
||||
|
||||
folder_perms = await Folders.get_shared_folder_ids_for_user(user.id, group_ids, db=db)
|
||||
|
||||
folders = await Folders.get_folders_by_ids(list(folder_perms.keys()), db=db)
|
||||
shared_folders = [folder for folder in folders if folder.user_id != user.id]
|
||||
shared_folders = await Folders.get_folders_by_ids(list(folder_perms.keys()), db=db)
|
||||
|
||||
owners = await Users.get_users_by_user_ids([folder.user_id for folder in shared_folders], db=db)
|
||||
owner_names = {owner.id: owner.name for owner in owners}
|
||||
|
|
@ -262,7 +261,7 @@ async def get_shared_folders(
|
|||
{
|
||||
**folder.model_dump(),
|
||||
'owner_name': owner_names.get(folder.user_id, 'Unknown'),
|
||||
'permission': folder_perms[folder.id],
|
||||
'permission': 'write' if folder.user_id == user.id else folder_perms[folder.id],
|
||||
}
|
||||
for folder in shared_folders
|
||||
]
|
||||
|
|
@ -278,7 +277,7 @@ async def get_shared_folders(
|
|||
{
|
||||
**child.model_dump(),
|
||||
'owner_name': owner_names.get(child.user_id, 'Unknown'),
|
||||
'permission': folder_perms[folder.id],
|
||||
'permission': 'write' if child.user_id == user.id else folder_perms[folder.id],
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -290,7 +290,10 @@
|
|||
|
||||
// Merge shared folders into the same structure
|
||||
for (const sf of sharedFolders) {
|
||||
if (folderMap[sf.id]) continue; // Already owned by user
|
||||
if (folderMap[sf.id]) {
|
||||
folderMap[sf.id].showOwnerInfo = true;
|
||||
continue;
|
||||
}
|
||||
folderMap[sf.id] = { ...sf, shared: true };
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -959,7 +959,9 @@
|
|||
lastReadAt={chat.last_read_at}
|
||||
active={chat.active ?? false}
|
||||
ownerName={chat.owner_name ?? null}
|
||||
ownerUserId={folders[folderId]?.shared || chat.user_id !== $user?.id
|
||||
ownerUserId={folders[folderId]?.showOwnerInfo ||
|
||||
folders[folderId]?.shared ||
|
||||
chat.user_id !== $user?.id
|
||||
? chat.user_id
|
||||
: null}
|
||||
readonly={chat.user_id !== $user?.id}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue