mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-25 08:42:16 +00:00
## Todos for release - [x] Configure Env in docs project on vercel - [x] Configure Root Path in the docs project on vercel - [ ] Remove old CSP https://github.com/zitadel/website/pull/1592 ## What we did This pull request migrates the project documentation from the old `docs/` directory to the new `apps/docs/` directory, introduces a new documentation system built with Next.js and Fumadocs, and updates all relevant references, configuration files, and documentation to reflect this change. It also adds new configuration and ignore files for the new documentation app, updates CI and linting to exclude the new docs from certain checks, and revises the contributing guidelines accordingly. **Documentation System Migration and New Docs App** * Migrated all documentation from `docs/` to `apps/docs/`, and updated all references in `README.md`, `CONTRIBUTING.md`, and other files to point to the new location. [[1]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L585-L640) [[2]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L660-R607) [[3]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L740-R687) [[4]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L2-R3) [[5]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L30-R30) * Added a new Next.js/Fumadocs-based documentation app under `apps/docs/`, including core app files, layouts, routing, search API, and a comprehensive `README.md` with development and contribution instructions. [[1]](diffhunk://#diff-5a1b07344a2c1b4d3f37b23ff1388b62cd9f57dea3c1cd23d8a0412b7602b132R1-R74) [[2]](diffhunk://#diff-462b9ad1eabbb7d1c29bb9c36e4931eb180fd7190900e6d2babf8f4d66ad1c28R1-R39) [[3]](diffhunk://#diff-e16ae25660ded787b10ac35dea96d5ecaacf895dae0afc8a9bd4382dc79a8c87R1-R7) [apps/docs/app/[[...slug]]/layout.tsxR1-R81](diffhunk://#diff-59e08acde4e805b7aeccef1dcf98f1d71dfc550777e6b9402085cee0e9fa4e0aR1-R81), [apps/docs/app/[[...slug]]/page.tsxR1-R79](diffhunk://#diff-e5df3f80d0fa01e12d63d81f29c57a9d14e846c78fd3beabb2ef768e38fd9580R1-R79), [[4]](diffhunk://#diff-389b34918e040cacaa87cd7201ffa462cc2b0b716736f537e3d3c660ac69353bR1-R7) [[5]](diffhunk://#diff-d3b03416d1c457b19f1c27b26f2db741412df841b875c26ccadc36e4522247f4R1-R29) [[6]](diffhunk://#diff-c8fb8339570a5305809be7c618e14705fd86390dc278e6ce8ba224a7bc8b0c3cR1-R25) **Configuration and Tooling Updates** * Updated `.github/workflows/codeql.yml`, `.golangci.yaml`, and `.github/dependabot.yml` to properly handle the new docs app: excluded `apps/docs` from certain checks, added npm dependency updates for the docs app, and excluded generated content. [[1]](diffhunk://#diff-12783128521e452af0cfac94b99b8d250413c516ec71fe6d97dbea666ff7ba27L8-R14) [[2]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R5-R6) [[3]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R126-R129) [[4]](diffhunk://#diff-dd4fbda47e51f1e35defb9275a9cd9c212ecde0b870cba89ddaaae65c5f3cd28R89-R106) * Updated `.devcontainer/devcontainer.json` to use the latest Go 1.25.3 version for consistency. **Licensing and Miscellaneous** * Added `apps/docs/` to the list of licensed directories in `LICENSING.md`. These changes ensure the documentation is now maintained in a modern, scalable system and all project tooling is updated to support the new structure. --------- Co-authored-by: Federico Coppede <[email protected]>
73 lines
3.5 KiB
Plaintext
73 lines
3.5 KiB
Plaintext
---
|
|
title: Set up a SaaS Product with Authentication and Authorization using ZITADEL
|
|
sidebar_label: Software-as-a-Service
|
|
---
|
|
|
|
This is an example architecture for a typical SaaS product.
|
|
To illustrate it, a fictional organization and project is used.
|
|
|
|
## Example Case
|
|
|
|
The Timing Company has a product called Time.
|
|
They have two environments, the development and the production environment.
|
|
In this case Time uses authentication and authorizations from ZITADEL.
|
|
This means that the users and also their authorizations will be managed within ZITADEL.
|
|
|
|

|
|
|
|
## Organization
|
|
|
|
An organization is the ZITADEL resource which contains users, projects, applications, policies and so on.
|
|
In an organization projects and users are managed by the organization.
|
|
You need at least one organization for your own company in our case "The Timing Company".
|
|
Your next step is to create an organization for each of your customers.
|
|
|
|
## Project
|
|
|
|
The idea of projects is to have a vessel for all components who are closely related to each other.
|
|
|
|
In this use case we would have two different projects, for each environment one. So lets call it "Time Dev" and "Time Prod".
|
|
These projects should be created in "The Timing Company" organization, because it is the owner of the project.
|
|
|
|
In the project you will configure all your roles and applications (clients and APIs).
|
|
|
|
### Project Settings
|
|
|
|
You can configure `check roles on authentication` on the project, if you want to restrict access to users that have the correct authorization for the project.
|
|
|
|
### Project Grant
|
|
|
|
To give a customer permissions to a project, a project grant to the customers organization is needed (search the granted organization by its domain).
|
|
It is also possible to delegate only specific roles of the project to a certain customer.
|
|
As soon as a project grant exists, the customer will see the project in the granted projects section of their organization and will be able to authorize their own users to the given project.
|
|
|
|
## Authorizations
|
|
|
|
To give a user permission to a project an authorization is needed.
|
|
All organizations which own the project or received a grant are able to authorize users.
|
|
It is also possible to authorize users outside the own company if the exact login name of the user is known.
|
|
|
|
## Project Login
|
|
|
|
There are some different use cases how the login should behave and look like:
|
|
|
|
1. Restrict Organization
|
|
|
|
With the primary domain scope the organization will be restricted to the requested domain, this means only users of the requested organization will be able to login.
|
|
The private labeling (branding) and the login policy of the requested organization will be set automatically.
|
|
|
|
<Callout>
|
|
More about the [Scopes](/apis/openidoauth/scopes)
|
|
</Callout>
|
|
|
|
2. Show private labeling (branding) of the project organization
|
|
|
|
You can configure on project-level which branding should be shown to users.
|
|
In the default the design of the instance will be shown, but as soon as the user is identified, the policy of the users organization (if specified) will be triggered.
|
|
If the setting is set to `Ensure Project Resource Owner Setting`, the private labeling of the project organization will always be triggered.
|
|
The last possibility is to show the private labeling of the project organization and as soon as the user is identified the user organization settings will be triggered.
|
|
For this the Allow User Resource Owner Setting should be set.
|
|
<Callout>
|
|
More about [Private Labeling](/guides/manage/customize/branding)
|
|
</Callout>
|