diff --git a/src/routes/admin/+layout.server.ts b/src/routes/admin/+layout.server.ts index 638b14d..cfa05fc 100644 --- a/src/routes/admin/+layout.server.ts +++ b/src/routes/admin/+layout.server.ts @@ -6,7 +6,7 @@ export const load: LayoutServerLoad = async ({ cookies }) => { const session = getSession(cookies); return { - userCount: session?.permissions.userRead() ? await User.count() : 0, - adminCount: session?.permissions.adminRead() ? await Admin.count() : 0 + userCount: session?.permissions.userRead() ? await User.count() : null, + adminCount: session?.permissions.adminRead() ? await Admin.count() : null }; }; diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte index 18e652f..97dc7e9 100644 --- a/src/routes/admin/+layout.svelte +++ b/src/routes/admin/+layout.svelte @@ -19,27 +19,31 @@ } export let data: LayoutData; - $adminCount = data.adminCount; + if (data.adminCount) $adminCount = data.adminCount; </script> {#if $page.url.pathname !== `${env.PUBLIC_BASE_PATH}/admin/login`} <div class="flex h-screen"> - <div class="h-full w-max"> - <ul class="menu p-4 w-fit h-full bg-base-200 text-base-content"> - <li> - <a href="{env.PUBLIC_BASE_PATH}/admin/users"> - <IconOutline name="user-group-outline" /> - <span class="ml-1">Registrierte Nutzer</span> - <div class="badge">{data.userCount}</div> - </a> - </li> - <li> - <a href="{env.PUBLIC_BASE_PATH}/admin/admin"> - <IconOutline name="users-outline" /> - <span class="ml-1">Website Admins</span> - <div class="badge">{$adminCount}</div> - </a> - </li> + <div class="h-full"> + <ul class="menu p-4 w-max h-full bg-base-200 text-base-content"> + {#if data.userCount != null} + <li> + <a href="{env.PUBLIC_BASE_PATH}/admin/users"> + <IconOutline name="user-group-outline" /> + <span class="ml-1">Registrierte Nutzer</span> + <div class="badge">{data.userCount}</div> + </a> + </li> + {/if} + {#if data.adminCount != null} + <li> + <a href="{env.PUBLIC_BASE_PATH}/admin/admin"> + <IconOutline name="users-outline" /> + <span class="ml-1">Website Admins</span> + <div class="badge">{$adminCount}</div> + </a> + </li> + {/if} <li class="mt-auto"> <button on:click={(e) => buttonTriggeredRequest(e, logout())}> <IconOutline name="arrow-left-on-rectangle-outline" /> diff --git a/src/routes/admin/admin/+page.server.ts b/src/routes/admin/admin/+page.server.ts index a86a32d..8c6a55d 100644 --- a/src/routes/admin/admin/+page.server.ts +++ b/src/routes/admin/admin/+page.server.ts @@ -2,8 +2,13 @@ import type { PageServerLoad } from './$types'; import { Admin } from '$lib/server/database'; import { getSession } from '$lib/server/session'; import { Permissions } from '$lib/permissions'; +import { redirect } from '@sveltejs/kit'; +import { env } from '$env/dynamic/public'; + +export const load: PageServerLoad = async ({ parent, cookies }) => { + const { adminCount } = await parent(); + if (adminCount == null) throw redirect(302, `${env.PUBLIC_BASE_PATH}/admin`); -export const load: PageServerLoad = async ({ cookies }) => { let admins: (typeof Admin.prototype)[] = []; if (getSession(cookies, { permissions: [Permissions.AdminRead] }) != null) { admins = await Admin.findAll({ raw: true, attributes: { exclude: ['password'] } }); diff --git a/src/routes/admin/users/+page.server.ts b/src/routes/admin/users/+page.server.ts index 234c5d6..e4dd08c 100644 --- a/src/routes/admin/users/+page.server.ts +++ b/src/routes/admin/users/+page.server.ts @@ -2,8 +2,13 @@ import type { PageServerLoad } from './$types'; import { User } from '$lib/server/database'; import { getSession } from '$lib/server/session'; import { Permissions } from '$lib/permissions'; +import { redirect } from '@sveltejs/kit'; +import { env } from '$env/dynamic/public'; + +export const load: PageServerLoad = async ({ parent, cookies }) => { + const { userCount } = await parent(); + if (userCount == null) throw redirect(302, `${env.PUBLIC_BASE_PATH}/admin`); -export const load: PageServerLoad = async ({ cookies }) => { return { count: getSession(cookies, { permissions: [Permissions.UserRead] }) != null ? await User.count() : 0