Skip to content

Commit 084d040

Browse files
committed
refac
1 parent 76854d1 commit 084d040

5 files changed

Lines changed: 55 additions & 30 deletions

File tree

backend/open_webui/routers/folders.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,8 @@ async def get_shared_folders(
210210
async def get_folder_by_id(id: str, user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session)):
211211
folder = await Folders.get_folder_by_id_and_user_id(id, user.id, db=db)
212212
if folder:
213-
return folder
213+
grants = await AccessGrants.get_grants_by_resource('folder', id, db=db)
214+
return {**folder.model_dump(), 'access_grants': [g.model_dump() for g in grants]}
214215

215216
# Check shared access
216217
folder = await Folders.get_folder_by_id(id, db=db)

src/lib/components/chat/Placeholder.svelte

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,14 @@
7474
7575
$: models = selectedModels.map((id) => $_models.find((m) => m.id === id));
7676
77-
// True when viewing a shared folder the current user doesn't own
78-
$: folderReadOnly = $selectedFolder != null && $selectedFolder.user_id !== $user?.id;
77+
// True when viewing a shared folder the current user doesn't own AND lacks write access
78+
$: folderReadOnly =
79+
$selectedFolder != null &&
80+
$selectedFolder.user_id !== $user?.id &&
81+
$selectedFolder.permission !== 'write';
82+
83+
// True when the current user does NOT own this folder (hide management menus)
84+
$: folderNotOwned = $selectedFolder != null && $selectedFolder.user_id !== $user?.id;
7985
</script>
8086

8187
<div class="m-auto w-full max-w-6xl px-2 @2xl:px-20 translate-y-6 py-24 text-center">
@@ -97,19 +103,19 @@
97103
<div class="w-full flex flex-col justify-center items-center">
98104
{#if $selectedFolder}
99105
<FolderTitle
100-
folder={$selectedFolder}
101-
readOnly={folderReadOnly}
102-
onUpdate={async (folder) => {
103-
await chats.set(await getChatList(localStorage.token, $currentChatPage));
104-
currentChatPage.set(1);
105-
}}
106-
onDelete={async () => {
107-
await chats.set(await getChatList(localStorage.token, $currentChatPage));
108-
currentChatPage.set(1);
106+
folder={$selectedFolder}
107+
readOnly={folderNotOwned}
108+
onUpdate={async (folder) => {
109+
await chats.set(await getChatList(localStorage.token, $currentChatPage));
110+
currentChatPage.set(1);
111+
}}
112+
onDelete={async () => {
113+
await chats.set(await getChatList(localStorage.token, $currentChatPage));
114+
currentChatPage.set(1);
109115

110-
selectedFolder.set(null);
111-
}}
112-
/>
116+
selectedFolder.set(null);
117+
}}
118+
/>
113119
{:else}
114120
<div class="flex flex-row justify-center gap-2.5 @sm:gap-3 w-fit px-5 max-w-xl">
115121
<div class="flex shrink-0 justify-center">

src/lib/components/layout/Sidebar/ChatItem.svelte

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,16 @@
529529
on:focus={(e) => {}}
530530
draggable="false"
531531
>
532+
{#if ownerUserId}
533+
<Tooltip content={ownerName || 'Unknown'}>
534+
<img
535+
src="/api/v1/users/{ownerUserId}/profile/image"
536+
alt=""
537+
class="size-4 rounded-full shrink-0 object-cover mr-1.5"
538+
/>
539+
</Tooltip>
540+
{/if}
541+
532542
<!-- Loading spinner for active chat (left side) -->
533543
{#if $activeChatIds.has(id)}
534544
<div class="shrink-0 self-center pr-2">
@@ -537,15 +547,6 @@
537547
{/if}
538548

539549
<div class="flex self-center flex-1 w-full min-w-0">
540-
{#if ownerUserId}
541-
<Tooltip content={ownerName || 'Unknown'}>
542-
<img
543-
src="/api/v1/users/{ownerUserId}/profile/image"
544-
alt=""
545-
class="size-4 rounded-full shrink-0 object-cover mr-1.5"
546-
/>
547-
</Tooltip>
548-
{/if}
549550
{#if unread}
550551
<div class="shrink-0 self-center pr-2.5 flex transition-opacity duration-300">
551552
<div class="size-1.5 bg-sky-500 rounded-full" />

src/lib/components/layout/Sidebar/Folders/FolderShareModal.svelte

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import Modal from '$lib/components/common/Modal.svelte';
66
import AccessControl from '$lib/components/workspace/common/AccessControl.svelte';
77
import XMark from '$lib/components/icons/XMark.svelte';
8-
import { updateFolderAccessById } from '$lib/apis/folders';
8+
import { getFolderById, updateFolderAccessById } from '$lib/apis/folders';
99
import { user } from '$lib/stores';
1010
1111
type AccessGrant = {
@@ -19,11 +19,28 @@
1919
export let folder: any = null;
2020
2121
let accessGrants: AccessGrant[] = [];
22+
let loading = false;
2223
23-
$: if (folder) {
24-
accessGrants = folder.access_grants ?? [];
24+
// Fetch fresh folder data (with access_grants) when modal opens
25+
$: if (show && folder?.id) {
26+
loadAccessGrants();
2527
}
2628
29+
const loadAccessGrants = async () => {
30+
loading = true;
31+
try {
32+
const freshFolder = await getFolderById(localStorage.token, folder.id);
33+
if (freshFolder) {
34+
accessGrants = freshFolder.access_grants ?? [];
35+
}
36+
} catch (e) {
37+
console.error('Failed to load folder access grants', e);
38+
accessGrants = folder?.access_grants ?? [];
39+
} finally {
40+
loading = false;
41+
}
42+
};
43+
2744
const handleAccessChange = async () => {
2845
if (!folder) return;
2946
try {

src/lib/components/layout/Sidebar/RecursiveFolder.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@
549549
});
550550
551551
if (folder) {
552-
await selectedFolder.set(folder);
552+
await selectedFolder.set({ ...folders[folderId], ...folder });
553553
}
554554
555555
await goto('/');
@@ -703,8 +703,8 @@
703703
createdAt={chat.created_at}
704704
updatedAt={chat.updated_at}
705705
lastReadAt={chat.last_read_at}
706-
ownerName={chat.owner_name ?? null}
707-
ownerUserId={chat.owner_name ? chat.user_id : null}
706+
ownerName={folders[folderId]?.shared ? (chat.owner_name ?? null) : null}
707+
ownerUserId={folders[folderId]?.shared && chat.owner_name ? chat.user_id : null}
708708
readonly={chat.user_id !== $user?.id}
709709
{shiftKey}
710710
on:change={(e) => {

0 commit comments

Comments
 (0)