Data Models
Beyond content, SveltePress functions as a platform for any type of data.
Creating New Data Models
The Admin Dashboard allows new data models to be created alongside the default contents
and users
tables.
Auth Contexts
PocketBase has two auth contexts, current user and admin. Specific permissions can be set
for each data model. By default, admin
has full access to all data a user has no access.
SveltePress surfaces both in the server context but only the current user in the universal context.
Server (+page.server.ts)
Running queries on the server in admin context:
+page.server.ts
ts
export const load = async ({ locals }) => {const { admin } = locals;const metadata = await admin.collection("metadata").getFullList();};
ts
export const load = async ({ locals }) => {const { admin } = locals;const metadata = await admin.collection("metadata").getFullList();};
Using the current user context:
+page.server.ts
ts
export const load = async ({ locals }) => {const { pb } = locals;const posts = await pb.collection("posts").getFullList();};
ts
export const load = async ({ locals }) => {const { pb } = locals;const posts = await pb.collection("posts").getFullList();};
With the correct API rules on the posts
data model,
it's possible to make this query return only posts belonging to the current user.
The API rule for List/Search could look like this:
@request.auth.id = author_id
Universal (+page.ts)
Only the current user context is available in SvelteKit's universal context:
+page.ts
ts
export const load = async ({ parent }) => {const { pb } = await parent();const posts = await pb.collection("posts").getFullList();};
ts
export const load = async ({ parent }) => {const { pb } = await parent();const posts = await pb.collection("posts").getFullList();};
Svelte/Vite prevent compilation if there's a mismatch of contexts.
Authentication vs Authorization
While SveltePress handles the authentication layer, the PocketBase instance behind SveltePress handles authorization. Each collection's API Rules page lets you define rules for every action:
- List/Search
- View
- Create
- Update
- Delete
See the PocketBase documentation for more info on authorization: https://pocketbase.io/docs/api-rules-and-filters/