diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 940e7053b1..8765ccd617 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1650,6 +1650,14 @@ USER_PERMISSIONS_WORKSPACE_TOOLS_EXPORT = ( os.getenv('USER_PERMISSIONS_WORKSPACE_TOOLS_EXPORT', 'False').lower() == 'true' ) +USER_PERMISSIONS_WORKSPACE_SKILLS_IMPORT = ( + os.getenv('USER_PERMISSIONS_WORKSPACE_SKILLS_IMPORT', 'False').lower() == 'true' +) + +USER_PERMISSIONS_WORKSPACE_SKILLS_EXPORT = ( + os.getenv('USER_PERMISSIONS_WORKSPACE_SKILLS_EXPORT', 'False').lower() == 'true' +) + USER_PERMISSIONS_WORKSPACE_MODELS_ALLOW_SHARING = ( os.getenv('USER_PERMISSIONS_WORKSPACE_MODELS_ALLOW_SHARING', 'False').lower() == 'true' @@ -1813,6 +1821,8 @@ DEFAULT_USER_PERMISSIONS = { 'prompts_export': USER_PERMISSIONS_WORKSPACE_PROMPTS_EXPORT, 'tools_import': USER_PERMISSIONS_WORKSPACE_TOOLS_IMPORT, 'tools_export': USER_PERMISSIONS_WORKSPACE_TOOLS_EXPORT, + 'skills_import': USER_PERMISSIONS_WORKSPACE_SKILLS_IMPORT, + 'skills_export': USER_PERMISSIONS_WORKSPACE_SKILLS_EXPORT, }, 'sharing': { 'models': USER_PERMISSIONS_WORKSPACE_MODELS_ALLOW_SHARING, diff --git a/backend/open_webui/routers/skills.py b/backend/open_webui/routers/skills.py index 064529abae..e92143aee1 100644 --- a/backend/open_webui/routers/skills.py +++ b/backend/open_webui/routers/skills.py @@ -131,7 +131,7 @@ async def export_skills( ): if user.role != 'admin' and not await has_permission( user.id, - 'workspace.skills', + 'workspace.skills_export', await Config.get('user.permissions'), db=db, ): @@ -158,8 +158,13 @@ async def create_new_skill( user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session), ): - if user.role != 'admin' and not await has_permission( - user.id, 'workspace.skills', await Config.get('user.permissions'), db=db + if user.role != 'admin' and not ( + await has_permission( + user.id, 'workspace.skills', await Config.get('user.permissions'), db=db + ) + or await has_permission( + user.id, 'workspace.skills_import', await Config.get('user.permissions'), db=db + ) ): raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, diff --git a/backend/open_webui/routers/users.py b/backend/open_webui/routers/users.py index 2d5de22cb5..83eb25312a 100644 --- a/backend/open_webui/routers/users.py +++ b/backend/open_webui/routers/users.py @@ -179,6 +179,8 @@ class WorkspacePermissions(BaseModel): prompts_export: bool = False tools_import: bool = False tools_export: bool = False + skills_import: bool = False + skills_export: bool = False class SharingPermissions(BaseModel): diff --git a/src/lib/components/admin/Users/Groups/Permissions.svelte b/src/lib/components/admin/Users/Groups/Permissions.svelte index 5180b1a240..f1d2bc5305 100644 --- a/src/lib/components/admin/Users/Groups/Permissions.svelte +++ b/src/lib/components/admin/Users/Groups/Permissions.svelte @@ -174,7 +174,22 @@ - {#if defaultPermissions?.workspace?.skills && !permissions.workspace.skills} + {#if permissions.workspace.skills} +
+
+
+ {$i18n.t('Import Skills')} +
+ +
+
+
+ {$i18n.t('Export Skills')} +
+ +
+
+ {:else if defaultPermissions?.workspace?.skills}
{$i18n.t('This is a default user permission and will remain enabled.')} diff --git a/src/lib/components/workspace/Skills.svelte b/src/lib/components/workspace/Skills.svelte index 9982045947..b6ea732044 100644 --- a/src/lib/components/workspace/Skills.svelte +++ b/src/lib/components/workspace/Skills.svelte @@ -263,7 +263,7 @@ }} /> - {#if $user?.role === 'admin' || $user?.permissions?.workspace?.skills} + {#if $user?.role === 'admin' || $user?.permissions?.workspace?.skills_import} {/if} - {#if total && ($user?.role === 'admin' || $user?.permissions?.workspace?.skills)} + {#if total && ($user?.role === 'admin' || $user?.permissions?.workspace?.skills_export)} - {#if $user?.role === 'admin' || $user?.permissions?.workspace?.skills} + {#if $user?.role === 'admin' || $user?.permissions?.workspace?.skills_export}