mirror of
https://github.com/open-webui/open-webui
synced 2024-11-25 13:29:53 +00:00
enh: arena model access control
This commit is contained in:
parent
1ab47a1ff9
commit
269151cd2c
@ -1114,6 +1114,17 @@ async def get_models(user=Depends(get_verified_user)):
|
|||||||
if user.role == "user":
|
if user.role == "user":
|
||||||
filtered_models = []
|
filtered_models = []
|
||||||
for model in models:
|
for model in models:
|
||||||
|
if model.get("arena"):
|
||||||
|
if has_access(
|
||||||
|
user.id,
|
||||||
|
type="read",
|
||||||
|
access_control=model.get("info", {})
|
||||||
|
.get("meta", {})
|
||||||
|
.get("access_control", {}),
|
||||||
|
):
|
||||||
|
filtered_models.append(model)
|
||||||
|
continue
|
||||||
|
|
||||||
model_info = Models.get_model_by_id(model["id"])
|
model_info = Models.get_model_by_id(model["id"])
|
||||||
if model_info:
|
if model_info:
|
||||||
if user.id == model_info.user_id or has_access(
|
if user.id == model_info.user_id or has_access(
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
import Minus from '$lib/components/icons/Minus.svelte';
|
import Minus from '$lib/components/icons/Minus.svelte';
|
||||||
import PencilSolid from '$lib/components/icons/PencilSolid.svelte';
|
import PencilSolid from '$lib/components/icons/PencilSolid.svelte';
|
||||||
import { toast } from 'svelte-sonner';
|
import { toast } from 'svelte-sonner';
|
||||||
|
import AccessControl from '$lib/components/workspace/common/AccessControl.svelte';
|
||||||
|
|
||||||
export let show = false;
|
export let show = false;
|
||||||
export let edit = false;
|
export let edit = false;
|
||||||
@ -39,6 +40,8 @@
|
|||||||
let modelIds = [];
|
let modelIds = [];
|
||||||
let filterMode = 'include';
|
let filterMode = 'include';
|
||||||
|
|
||||||
|
let accessControl = {};
|
||||||
|
|
||||||
let imageInputElement;
|
let imageInputElement;
|
||||||
let loading = false;
|
let loading = false;
|
||||||
|
|
||||||
@ -74,7 +77,8 @@
|
|||||||
profile_image_url: profileImageUrl,
|
profile_image_url: profileImageUrl,
|
||||||
description: description || null,
|
description: description || null,
|
||||||
model_ids: modelIds.length > 0 ? modelIds : null,
|
model_ids: modelIds.length > 0 ? modelIds : null,
|
||||||
filter_mode: modelIds.length > 0 ? (filterMode ? filterMode : null) : null
|
filter_mode: modelIds.length > 0 ? (filterMode ? filterMode : null) : null,
|
||||||
|
access_control: accessControl
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -98,6 +102,7 @@
|
|||||||
description = model.meta.description;
|
description = model.meta.description;
|
||||||
modelIds = model.meta.model_ids || [];
|
modelIds = model.meta.model_ids || [];
|
||||||
filterMode = model.meta?.filter_mode ?? 'include';
|
filterMode = model.meta?.filter_mode ?? 'include';
|
||||||
|
accessControl = model.meta?.access_control ?? {};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -283,6 +288,14 @@
|
|||||||
|
|
||||||
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
|
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
|
||||||
|
|
||||||
|
<div class="my-2 -mx-2">
|
||||||
|
<div class="px-3 py-2 bg-gray-50 dark:bg-gray-950 rounded-lg">
|
||||||
|
<AccessControl bind:accessControl />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr class=" border-gray-100 dark:border-gray-700/10 my-2.5 w-full" />
|
||||||
|
|
||||||
<div class="flex flex-col w-full">
|
<div class="flex flex-col w-full">
|
||||||
<div class="mb-1 flex justify-between">
|
<div class="mb-1 flex justify-between">
|
||||||
<div class="text-xs text-gray-500">{$i18n.t('Models')}</div>
|
<div class="text-xs text-gray-500">{$i18n.t('Models')}</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user