Browse Source

feat: public sharing permissions

Co-Authored-By: Taylor Wilsdon <6508528+taylorwilsdon@users.noreply.github.com>
Timothy Jaeryang Baek 1 month ago
parent
commit
580965df17

+ 6 - 2
src/lib/components/workspace/Knowledge/CreateKnowledgeBase.svelte

@@ -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>
 

+ 2 - 1
src/lib/components/workspace/Knowledge/KnowledgeBase.svelte

@@ -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();
 			}}

+ 5 - 1
src/lib/components/workspace/Models/ModelEditor.svelte

@@ -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>
 

+ 2 - 0
src/lib/components/workspace/Prompts/PromptEditor.svelte

@@ -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">

+ 2 - 0
src/lib/components/workspace/Tools/ToolkitEditor.svelte

@@ -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">

+ 38 - 4
src/lib/components/workspace/common/AccessControl.svelte

@@ -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">

+ 2 - 1
src/lib/components/workspace/common/AccessControlModal.svelte

@@ -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>