diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 0119d46..3745ef1 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,6 +1,6 @@
# These are supported funding model platforms
-github: [IKatsuba,Saasfy]
+github: [IKatsuba, Saasfy]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
diff --git a/apps/web/app/app/(dashboard)/[workspaceSlug]/page.tsx b/apps/web/app/app/(dashboard)/[workspaceSlug]/page.tsx
index 7985194..3c85313 100644
--- a/apps/web/app/app/(dashboard)/[workspaceSlug]/page.tsx
+++ b/apps/web/app/app/(dashboard)/[workspaceSlug]/page.tsx
@@ -20,7 +20,7 @@ export default async function Component({ params }: { params: { workspaceSlug: s
const { data: workspace } = await supabase
.from('workspaces')
- .select('*, workspace_users(*)')
+ .select('*, workspace_users!inner(*)')
.eq('slug', params.workspaceSlug)
.eq('workspace_users.user_id', user.id)
.single();
diff --git a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/domains/page.tsx b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/domains/page.tsx
index 049b423..4cdb7d9 100644
--- a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/domains/page.tsx
+++ b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/domains/page.tsx
@@ -1,6 +1,8 @@
+import { redirect } from 'next/navigation';
+
import { ExternalLinkIcon } from 'lucide-react';
-import { createAdminClient } from '@saasfy/supabase/server';
+import { createAdminClient, getUser } from '@saasfy/supabase/server';
import { Badge } from '@saasfy/ui/badge';
import { AddDomainForm } from './add-form';
@@ -8,22 +10,26 @@ import { DomainConfiguration } from './domain-configuration';
import { RemoveDomainButton } from './remove-domain-button';
export default async function Component({ params }: { params: { workspaceSlug: string } }) {
+ const user = await getUser();
+
+ if (!user) {
+ return redirect('/login');
+ }
+
const supabase = createAdminClient();
const { data: workspace } = await supabase
.from('workspaces')
- .select('*')
+ .select('*, workspace_users!inner(*), domains(*)')
.eq('slug', params.workspaceSlug)
+ .eq('workspace_users.user_id', user.id)
.single();
if (!workspace) {
return null;
}
- const { data: domains, error } = await supabase
- .from('domains')
- .select('*')
- .eq('workspace_id', workspace.id);
+ const domains = workspace.domains;
return (
diff --git a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/layout.tsx b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/layout.tsx
index b51729d..96b58e5 100644
--- a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/layout.tsx
+++ b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/layout.tsx
@@ -1,7 +1,7 @@
import { ReactNode } from 'react';
import { redirect } from 'next/navigation';
-import { createAdminClient } from '@saasfy/supabase/server';
+import { createAdminClient, getUser } from '@saasfy/supabase/server';
import { Nav } from './nav';
@@ -12,11 +12,18 @@ export default async function SettingsLayout({
children: ReactNode;
params: { workspaceSlug: string };
}) {
+ const user = await getUser();
+
+ if (!user) {
+ return redirect(`/signin/signin`);
+ }
+
const supabase = createAdminClient();
const { data: workspace } = await supabase
.from('workspaces')
- .select('*')
+ .select('*, workspace_users!inner(*)')
+ .eq('workspace_users.user_id', user.id)
.eq('slug', params.workspaceSlug)
.single();
diff --git a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/members/page.tsx b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/members/page.tsx
index 45c54af..c7522ee 100644
--- a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/members/page.tsx
+++ b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/members/page.tsx
@@ -4,7 +4,7 @@ import { redirect } from 'next/navigation';
import { FilterIcon, PlusIcon } from 'lucide-react';
import postgres from 'postgres';
-import { createAdminClient, Tables } from '@saasfy/supabase/server';
+import { createAdminClient, getUser, Tables } from '@saasfy/supabase/server';
import { Button } from '@saasfy/ui/button';
import {
DropdownMenu,
@@ -22,12 +22,19 @@ import { InviteTable } from './invite-table';
import { MemberTable } from './member-table';
export default async function Component({ params }: { params: { workspaceSlug: string } }) {
+ const user = await getUser();
+
+ if (!user) {
+ return redirect('/login');
+ }
+
const supabase = createAdminClient();
const { data: workspace } = await supabase
.from('workspaces')
- .select('*')
+ .select('*, workspace_users!inner(*)')
.eq('slug', params.workspaceSlug)
+ .eq('workspace_users.user_id', user.id)
.single();
if (!workspace) {
diff --git a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/page.tsx b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/page.tsx
index f268128..48dc482 100644
--- a/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/page.tsx
+++ b/apps/web/app/app/(dashboard)/[workspaceSlug]/settings/page.tsx
@@ -23,7 +23,7 @@ export default async function Settings({ params }: { params: { workspaceSlug: st
const { data: workspace } = await supabase
.from('workspaces')
- .select('*, workspace_users(*)')
+ .select('*, workspace_users!inner(*)')
.eq('slug', params.workspaceSlug)
.eq('workspace_users.user_id', user.id)
.single();
diff --git a/apps/web/app/app/(dashboard)/layout.tsx b/apps/web/app/app/(dashboard)/layout.tsx
index 4a9ed2f..de6ff17 100644
--- a/apps/web/app/app/(dashboard)/layout.tsx
+++ b/apps/web/app/app/(dashboard)/layout.tsx
@@ -20,7 +20,7 @@ export default async function DashboardLayout({ children }: { children: ReactNod
const { data: workspaces } = await supabase
.from('workspaces')
- .select('*, workspace_users(*)')
+ .select('*, workspace_users!inner(*)')
.eq('workspace_users.user_id', user.id);
return (
diff --git a/apps/web/app/app/(dashboard)/page.tsx b/apps/web/app/app/(dashboard)/page.tsx
index ab2e4c0..7013085 100644
--- a/apps/web/app/app/(dashboard)/page.tsx
+++ b/apps/web/app/app/(dashboard)/page.tsx
@@ -20,7 +20,7 @@ export default async function Component() {
const supabase = createAdminClient();
const { data: workspaces } = await supabase
.from('workspaces')
- .select('*, projects(id), domains(id), workspace_users(id), plans(name)')
+ .select('*, projects(id), domains(id), workspace_users!inner(id), plans(name)')
.eq('workspace_users.user_id', user.id)
.limit(8);
diff --git a/packages/api/src/lib/with-workspace-user.ts b/packages/api/src/lib/with-workspace-user.ts
index 76b65fa..bb350e7 100644
--- a/packages/api/src/lib/with-workspace-user.ts
+++ b/packages/api/src/lib/with-workspace-user.ts
@@ -24,7 +24,7 @@ export function withWorkspaceUser(
const { data: workspace } = await supabase
.from('workspaces')
- .select('*, workspace_users(*)')
+ .select('*, workspace_users!inner(*)')
.eq('slug', params.workspaceSlug)
.eq('workspace_users.user_id', user.id)
.in('workspace_users.role', roles)
diff --git a/packages/components/src/lib/create-project/actions.ts b/packages/components/src/lib/create-project/actions.ts
index 40df895..cb265e1 100644
--- a/packages/components/src/lib/create-project/actions.ts
+++ b/packages/components/src/lib/create-project/actions.ts
@@ -46,7 +46,7 @@ export async function createProject(formData: FormData) {
const { data: workspace } = await supabase
.from('workspaces')
- .select('*, workspace_users(*)')
+ .select('*, workspace_users!inner(*)')
.eq('slug', workspaceSlug)
.eq('workspace_users.user_id', user.id)
.single();