enh/refac: permissions

This commit is contained in:
Timothy Jaeryang Baek
2025-01-15 23:01:43 -08:00
parent 2aa82d98cc
commit 56f57928c2
6 changed files with 169 additions and 47 deletions

View File

@@ -53,10 +53,15 @@
tools: false
},
chat: {
controls: true,
file_upload: true,
delete: true,
edit: true,
temporary: true
},
features: {
web_search: true,
image_generation: true
}
};

View File

@@ -37,10 +37,15 @@
tools: false
},
chat: {
controls: true,
file_upload: true,
delete: true,
edit: true,
temporary: true
},
features: {
web_search: true,
image_generation: true
}
};
export let userIds = [];
@@ -65,20 +70,8 @@
if (group) {
name = group.name;
description = group.description;
permissions = group?.permissions ?? {
workspace: {
models: false,
knowledge: false,
prompts: false,
tools: false
},
chat: {
file_upload: true,
delete: true,
edit: true,
temporary: true
}
};
permissions = group?.permissions ?? {};
userIds = group?.user_ids ?? [];
}
};

View File

@@ -1,11 +1,12 @@
<script lang="ts">
import { getContext } from 'svelte';
import { getContext, onMount } from 'svelte';
const i18n = getContext('i18n');
import Switch from '$lib/components/common/Switch.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte';
export let permissions = {
// Default values for permissions
const defaultPermissions = {
workspace: {
models: false,
knowledge: false,
@@ -13,12 +14,38 @@
tools: false
},
chat: {
controls: true,
delete: true,
edit: true,
temporary: true,
file_upload: true
},
features: {
web_search: true,
image_generation: true
}
};
export let permissions = {};
// Reactive statement to ensure all fields are present in `permissions`
$: {
permissions = fillMissingProperties(permissions, defaultPermissions);
}
function fillMissingProperties(obj: any, defaults: any) {
return {
...defaults,
...obj,
workspace: { ...defaults.workspace, ...obj.workspace },
chat: { ...defaults.chat, ...obj.chat },
features: { ...defaults.features, ...obj.features }
};
}
onMount(() => {
permissions = fillMissingProperties(permissions, defaultPermissions);
});
</script>
<div>
@@ -169,6 +196,14 @@
<div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Chat Permissions')}</div>
<div class=" flex w-full justify-between my-2 pr-2">
<div class=" self-center text-xs font-medium">
{$i18n.t('Allow Chat Controls')}
</div>
<Switch bind:state={permissions.chat.controls} />
</div>
<div class=" flex w-full justify-between my-2 pr-2">
<div class=" self-center text-xs font-medium">
{$i18n.t('Allow File Upload')}
@@ -201,4 +236,26 @@
<Switch bind:state={permissions.chat.temporary} />
</div>
</div>
<hr class=" border-gray-50 dark:border-gray-850 my-2" />
<div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Features Permissions')}</div>
<div class=" flex w-full justify-between my-2 pr-2">
<div class=" self-center text-xs font-medium">
{$i18n.t('Web Search')}
</div>
<Switch bind:state={permissions.features.web_search} />
</div>
<div class=" flex w-full justify-between my-2 pr-2">
<div class=" self-center text-xs font-medium">
{$i18n.t('Image Generation')}
</div>
<Switch bind:state={permissions.features.image_generation} />
</div>
</div>
</div>