From 587aa09b4064080116f1487be3ca73da96cc08e1 Mon Sep 17 00:00:00 2001 From: boban Date: Sat, 16 May 2026 00:43:55 +0200 Subject: [PATCH] fix(workspace): unique slug generation, null-safe middleware auth guard --- app/Domains/Workspace/Actions/CreateWorkspace.php | 13 ++++++++++++- app/Http/Middleware/ResolveWorkspace.php | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/Domains/Workspace/Actions/CreateWorkspace.php b/app/Domains/Workspace/Actions/CreateWorkspace.php index 944cbf6..0f5e884 100644 --- a/app/Domains/Workspace/Actions/CreateWorkspace.php +++ b/app/Domains/Workspace/Actions/CreateWorkspace.php @@ -13,7 +13,7 @@ class CreateWorkspace { $workspace = Workspace::create([ 'name' => $data['name'], - 'slug' => Str::slug($data['name']), + 'slug' => $this->uniqueSlug(Str::slug($data['name'])), 'owner_id' => $owner->id, ]); @@ -30,4 +30,15 @@ class CreateWorkspace return $workspace; } + + private function uniqueSlug(string $base): string + { + $slug = $base; + $i = 2; + while (Workspace::where('slug', $slug)->exists()) { + $slug = "{$base}-{$i}"; + $i++; + } + return $slug; + } } diff --git a/app/Http/Middleware/ResolveWorkspace.php b/app/Http/Middleware/ResolveWorkspace.php index dcf6b21..ac5c34d 100644 --- a/app/Http/Middleware/ResolveWorkspace.php +++ b/app/Http/Middleware/ResolveWorkspace.php @@ -19,7 +19,8 @@ class ResolveWorkspace $workspace = Workspace::where('ulid', $ulid)->firstOrFail(); // 404 instead of 403 — don't leak existence across workspace boundaries - if (! $request->user()?->workspaceMemberships()->where('workspace_id', $workspace->id)->exists()) { + $user = $request->user(); + if (! $user || ! $user->workspaceMemberships()->where('workspace_id', $workspace->id)->exists()) { abort(404); }