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