enh: access grant level perms

This commit is contained in:
Timothy Jaeryang Baek
2026-02-23 15:49:05 -06:00
parent a52e6c2d57
commit 3d99de6771
22 changed files with 201 additions and 8 deletions
@@ -395,6 +395,28 @@
<hr class=" border-gray-100/30 dark:border-gray-850/30" />
<div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Access Grants')}</div>
<div class="flex flex-col w-full">
<div class="flex w-full justify-between my-1">
<div class=" self-center text-xs font-medium">
{$i18n.t('Allow Sharing With Users')}
</div>
<Switch bind:state={permissions.access_grants.allow_users} />
</div>
{#if defaultPermissions?.access_grants?.allow_users && !permissions.access_grants.allow_users}
<div>
<div class="text-xs text-gray-500">
{$i18n.t('This is a default user permission and will remain enabled.')}
</div>
</div>
{/if}
</div>
</div>
<hr class=" border-gray-100/30 dark:border-gray-850/30" />
<div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('Chat Permissions')}</div>
@@ -871,6 +871,9 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
bind:show={showAccessControlModal}
bind:accessGrants={note.access_grants}
accessRoles={['read', 'write']}
share={$user?.permissions?.sharing?.notes || $user?.role === 'admin'}
sharePublic={$user?.permissions?.sharing?.public_notes || $user?.role === 'admin'}
shareUsers={$user?.permissions?.access_grants?.allow_users || $user?.role === 'admin'}
onChange={async () => {
if (id) {
try {
@@ -115,6 +115,7 @@
accessRoles={['read', 'write']}
share={$user?.permissions?.sharing?.knowledge || $user?.role === 'admin'}
sharePublic={$user?.permissions?.sharing?.public_knowledge || $user?.role === 'admin'}
shareUsers={$user?.permissions?.access_grants?.allow_users || $user?.role === "admin"}
/>
</div>
@@ -837,6 +837,7 @@
bind:accessGrants={knowledge.access_grants}
share={$user?.permissions?.sharing?.knowledge || $user?.role === 'admin'}
sharePublic={$user?.permissions?.sharing?.public_knowledge || $user?.role === 'admin'}
shareUsers={$user?.permissions?.access_grants?.allow_users || $user?.role === "admin"}
onChange={async () => {
try {
await updateKnowledgeAccessGrants(localStorage.token, id, knowledge.access_grants ?? []);
@@ -332,6 +332,7 @@
accessRoles={preset ? ['read', 'write'] : ['read']}
share={$user?.permissions?.sharing?.models || $user?.role === 'admin'}
sharePublic={$user?.permissions?.sharing?.public_models || $user?.role === 'admin'}
shareUsers={$user?.permissions?.access_grants?.allow_users || $user?.role === "admin"}
onChange={async () => {
if (edit && model?.id) {
try {
@@ -283,6 +283,7 @@
accessRoles={['read', 'write']}
share={$user?.permissions?.sharing?.prompts || $user?.role === 'admin'}
sharePublic={$user?.permissions?.sharing?.public_prompts || $user?.role === 'admin'}
shareUsers={$user?.permissions?.access_grants?.allow_users || $user?.role === 'admin'}
onChange={async () => {
if (edit && prompt?.id) {
try {
@@ -114,6 +114,7 @@
accessRoles={['read', 'write']}
share={$user?.permissions?.sharing?.skills || $user?.role === 'admin'}
sharePublic={$user?.permissions?.sharing?.public_skills || $user?.role === 'admin'}
shareUsers={$user?.permissions?.access_grants?.allow_users || $user?.role === 'admin'}
onChange={async () => {
if (edit && skill?.id) {
try {
@@ -193,6 +193,7 @@ class Tools:
accessRoles={['read', 'write']}
share={$user?.permissions?.sharing?.tools || $user?.role === 'admin'}
sharePublic={$user?.permissions?.sharing?.public_tools || $user?.role === 'admin'}
shareUsers={$user?.permissions?.access_grants?.allow_users || $user?.role === 'admin'}
onChange={async () => {
if (edit && id) {
try {
@@ -33,6 +33,7 @@
export let share = true;
export let sharePublic = true;
export let shareUsers = true;
let groups: any[] = [];
const resolvingGroupIds = new Set<string>();
@@ -419,7 +420,7 @@
});
</script>
<AddAccessModal bind:show={showAddAccessModal} onAdd={handleAddAccess} />
<AddAccessModal bind:show={showAddAccessModal} {shareUsers} onAdd={handleAddAccess} />
<div class=" rounded-lg flex flex-col gap-1">
<div class="py-2">
@@ -562,6 +563,7 @@
{/each}
<!-- Users -->
{#if shareUsers}
{#each selectedUsers as user}
<div
class="flex items-center gap-3 justify-between text-sm w-full transition border-b border-gray-50 dark:border-gray-850 pb-2 last:border-0"
@@ -607,6 +609,7 @@
</div>
</div>
{/each}
{/if}
{#if !hasPublicReadGrant(accessGrants ?? []) && accessGroups.length === 0 && selectedUsers.length === 0}
<div class="text-xs text-gray-500 text-center py-4">
@@ -20,6 +20,7 @@
export let share = true;
export let sharePublic = true;
export let shareUsers = true;
export let onChange = () => {};
</script>
@@ -48,6 +49,7 @@
{accessRoles}
{share}
{sharePublic}
{shareUsers}
/>
</div>
</div>
@@ -7,6 +7,7 @@
import MemberSelector from '$lib/components/workspace/common/MemberSelector.svelte';
export let show = false;
export let shareUsers = true;
export let onAdd = (payload: { userIds: string[]; groupIds: string[] }) => {};
let userIds: string[] = [];
@@ -51,7 +52,7 @@
}}
>
<div class="flex flex-col w-full h-full pb-2">
<MemberSelector bind:userIds bind:groupIds includeGroups={true} />
<MemberSelector bind:userIds bind:groupIds includeGroups={true} includeUsers={shareUsers} />
</div>
<div class="flex justify-end pt-3 text-sm font-medium gap-1.5">
@@ -19,6 +19,7 @@
import { getGroups } from '$lib/apis/groups';
export let includeGroups = true;
export let includeUsers = true;
export let pagination = false;
export let groupIds = [];
@@ -237,6 +238,7 @@
</div>
{/if}
{#if includeUsers}
<div class="text-xs text-gray-500 mb-1 mx-1">
{$i18n.t('Users')}
</div>
@@ -295,6 +297,7 @@
{/if}
{/each}
</div>
{/if}
</div>
</div>
</div>