feat: public sharing permissions

Co-Authored-By: Taylor Wilsdon <6508528+taylorwilsdon@users.noreply.github.com>
This commit is contained in:
Timothy Jaeryang Baek 2025-03-31 17:28:25 -07:00
parent 50b3f47f81
commit 580965df17
7 changed files with 57 additions and 9 deletions

View File

@ -5,7 +5,7 @@
import { createNewKnowledge, getKnowledgeBases } from '$lib/apis/knowledge';
import { toast } from 'svelte-sonner';
import { knowledge } from '$lib/stores';
import { knowledge, user } from '$lib/stores';
import AccessControl from '../common/AccessControl.svelte';
let loading = false;
@ -112,7 +112,11 @@
<div class="mt-2">
<div class="px-3 py-2 bg-gray-50 dark:bg-gray-950 rounded-lg">
<AccessControl bind:accessControl accessRoles={['read', 'write']} />
<AccessControl
bind:accessControl
accessRoles={['read', 'write']}
allowPublic={$user?.permissions?.sharing?.public_knowledge || $user?.role === 'admin'}
/>
</div>
</div>

View File

@ -9,7 +9,7 @@
import { goto } from '$app/navigation';
import { page } from '$app/stores';
import { mobile, showSidebar, knowledge as _knowledge, config } from '$lib/stores';
import { mobile, showSidebar, knowledge as _knowledge, config, user } from '$lib/stores';
import { updateFileDataContentById, uploadFile, deleteFileById } from '$lib/apis/files';
import {
@ -619,6 +619,7 @@
<AccessControlModal
bind:show={showAccessControlModal}
bind:accessControl={knowledge.access_control}
allowPublic={$user?.permissions?.sharing?.public_knowledge || $user?.role === 'admin'}
onChange={() => {
changeDebounceHandler();
}}

View File

@ -530,7 +530,11 @@
<div class="my-2">
<div class="px-3 py-2 bg-gray-50 dark:bg-gray-950 rounded-lg">
<AccessControl bind:accessControl accessRoles={['read', 'write']} />
<AccessControl
bind:accessControl
accessRoles={['read', 'write']}
allowPublic={$user?.permissions?.sharing?.public_models || $user?.role === 'admin'}
/>
</div>
</div>

View File

@ -7,6 +7,7 @@
import AccessControl from '../common/AccessControl.svelte';
import LockClosed from '$lib/components/icons/LockClosed.svelte';
import AccessControlModal from '../common/AccessControlModal.svelte';
import { user } from '$lib/stores';
export let onSubmit: Function;
export let edit = false;
@ -72,6 +73,7 @@
bind:show={showAccessControlModal}
bind:accessControl
accessRoles={['read', 'write']}
allowPublic={$user?.permissions?.sharing?.public_prompts || $user?.role === 'admin'}
/>
<div class="w-full max-h-full flex justify-center">

View File

@ -11,6 +11,7 @@
import Tooltip from '$lib/components/common/Tooltip.svelte';
import LockClosed from '$lib/components/icons/LockClosed.svelte';
import AccessControlModal from '../common/AccessControlModal.svelte';
import { user } from '$lib/stores';
let formElement = null;
let loading = false;
@ -183,6 +184,7 @@ class Tools:
bind:show={showAccessControlModal}
bind:accessControl
accessRoles={['read', 'write']}
allowPublic={$user?.permissions?.sharing?.public_tools || $user?.role === 'admin'}
/>
<div class=" flex flex-col justify-between w-full overflow-y-auto h-full">

View File

@ -15,14 +15,44 @@
export let accessRoles = ['read'];
export let accessControl = null;
export let allowPublic = true;
let selectedGroupId = '';
let groups = [];
$: if (!allowPublic && accessControl === null) {
accessControl = {
read: {
group_ids: [],
user_ids: []
},
write: {
group_ids: [],
user_ids: []
}
};
onChange(accessControl);
}
onMount(async () => {
groups = await getGroups(localStorage.token);
if (accessControl === null) {
accessControl = null;
if (allowPublic) {
accessControl = null;
} else {
accessControl = {
read: {
group_ids: [],
user_ids: []
},
write: {
group_ids: [],
user_ids: []
}
};
onChange(accessControl);
}
} else {
accessControl = {
read: {
@ -104,17 +134,21 @@
} else {
accessControl = {
read: {
group_ids: []
group_ids: [],
user_ids: []
},
write: {
group_ids: []
group_ids: [],
user_ids: []
}
};
}
}}
>
<option class=" text-gray-700" value="private" selected>{$i18n.t('Private')}</option>
<option class=" text-gray-700" value="public" selected>{$i18n.t('Public')}</option>
{#if allowPublic}
<option class=" text-gray-700" value="public" selected>{$i18n.t('Public')}</option>
{/if}
</select>
<div class=" text-xs text-gray-400 font-medium">

View File

@ -8,6 +8,7 @@
export let show = false;
export let accessControl = null;
export let accessRoles = ['read'];
export let allowPublic = true;
export let onChange = () => {};
</script>
@ -38,7 +39,7 @@
</div>
<div class="w-full px-5 pb-4 dark:text-white">
<AccessControl bind:accessControl {onChange} {accessRoles} />
<AccessControl bind:accessControl {onChange} {accessRoles} {allowPublic} />
</div>
</div>
</Modal>