diff --git a/backend/windmill-api/src/workspaces.rs b/backend/windmill-api/src/workspaces.rs index 088226b3a1..d9003da4c9 100644 --- a/backend/windmill-api/src/workspaces.rs +++ b/backend/windmill-api/src/workspaces.rs @@ -111,6 +111,7 @@ pub fn global_service() -> Router { .route("/allowed_domain_auto_invite", get(is_allowed_auto_domain)) .route("/unarchive/:workspace", post(unarchive_workspace)) .route("/delete/:workspace", delete(delete_workspace)) + .route("/create_workspace_require_superadmin", get(create_workspace_require_superadmin)) } #[cfg(feature = "enterprise")] @@ -1070,10 +1071,19 @@ async fn check_name_conflict<'c>(tx: &mut Transaction<'c, Postgres>, w_id: &str) lazy_static::lazy_static! { - pub static ref CREATE_WORKSPACE_REQUIRE_SUPERADMIN: bool = std::env::var("CREATE_WORKSPACE_REQUIRE_SUPERADMIN").is_ok_and(|x| x.parse::().unwrap_or(true)); + pub static ref CREATE_WORKSPACE_REQUIRE_SUPERADMIN: bool = { + match std::env::var("CREATE_WORKSPACE_REQUIRE_SUPERADMIN") { + Ok(val) => val == "true", + Err(_) => true, + } + }; } +async fn create_workspace_require_superadmin() -> String { + format!("{}", *CREATE_WORKSPACE_REQUIRE_SUPERADMIN) +} + async fn _check_nb_of_workspaces(db: &DB) -> Result<()> { let nb_workspaces = sqlx::query_scalar!("SELECT COUNT(*) FROM workspace WHERE id != 'admins' AND deleted = false",) .fetch_one(db) diff --git a/frontend/src/routes/(root)/(logged)/user/(user)/workspaces/+page.svelte b/frontend/src/routes/(root)/(logged)/user/(user)/workspaces/+page.svelte index 615d79df12..8b77f3298d 100644 --- a/frontend/src/routes/(root)/(logged)/user/(user)/workspaces/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/user/(user)/workspaces/+page.svelte @@ -14,6 +14,7 @@ import { USER_SETTINGS_HASH } from '$lib/components/sidebar/settings' import { switchWorkspace } from '$lib/storeUtils' import { Cog, Crown } from 'lucide-svelte' + import { isCloudHosted } from '$lib/cloud' let invites: WorkspaceInvite[] = [] let list_all_as_super_admin: boolean = false @@ -71,6 +72,18 @@ $: nonAdminWorkspaces = (workspaces ?? []).filter((x) => x.id != 'admins') $: noWorkspaces = $superadmin && nonAdminWorkspaces.length == 0 + async function getCreateWorkspaceRequireSuperadmin() { + const r = await fetch('/api/workspaces/create_workspace_require_superadmin') + const t = await r.text() + createWorkspace = t != 'true' + } + + let createWorkspace = $superadmin || isCloudHosted() + + if (!createWorkspace) { + getCreateWorkspaceRequireSuperadmin() + } + loadInvites() loadWorkspaces() @@ -114,7 +127,8 @@ {#if workspaces && $usersWorkspaceStore} {#if workspaces.length == 0}

- You are not a member of any workspace yet. Accept an invitation or create your own + You are not a member of any workspace yet. Accept an invitation {#if createWorkspace}or + create your own{/if} workspace.

{/if} @@ -157,16 +171,18 @@ {/each} {/if} -
- -
+ {#if createWorkspace} +
+ +
+ {/if}

Invites to join a Workspace

{#if invites.length == 0}