2.5 KiB
2.5 KiB
Sites and authors: cross-slice context
The design for Sites and Authors is in screens/sites.md, screens/authors.md, the "Editor: site and authors", "Profile: author profile" and "Articles: sites and authors" sections of the editor, profile and articles docs, and the board groups listed in README.md (pass 3). Behaviour still comes from features/; where the two disagree, stop and ask.
Roles
| Action | Owner | Admin | Other roles |
|---|---|---|---|
| Create, edit, set default, delete a site | yes | no | no |
| Read the site list, choose an article's site | yes | yes | yes, if they can edit the article |
| Create, edit, delete any author | yes | yes | no |
| Read authors, pick authors on an article | yes | yes | yes |
Create and edit their own linked author (POST /v1/author/me) |
yes | yes | yes |
| Create an author from the editor ("Create author…", "This is me") | yes | yes | no |
Decisions already taken
- One site per article (
site_idon the article). No per-site publish state:is_onlinestays the global switch. API keys stay global. - The site key is immutable after creation. Exactly one default site exists and it cannot be deleted. Deleting a site with articles requires
reassign_to. - Authors are separate from users. An optional, unique link to a user. The slug is globally unique and not tied to a site. Zero authors on an article is allowed and never blocks publishing. Deleting an author with articles requires
reassign_to(an author id ornone). - Media used as an author avatar or a site's default social image counts as media usage.
- The default site is seeded once from
PUBLIC_URL. That variable is the CMS's own address (email links), so the seed is only a starting value that the owner edits. The base URL must be https, except for loopback hosts. - Existing articles are backfilled to the default site and get no authors.
Slices, in order
- Sites API. 2. Authors API (independent of 1; both touch the article update route and the article response, so merge 1 first and rebase 2).
- Sites and Authors screens plus the shared directory pieces (
DirectoryFrame.dc.html). Existing Editor, Articles and Profile screens are not changed here. - Editor, Articles and Profile integration, which also makes every existing frame of those screens pass the visual check.
Open point for the first slice
PATCH /v1/article/{id} is served by UpdateArticleBody and only updates the body. Extending it with site_id and author_ids[] or splitting a metadata endpoint is decided in the specifier step of slices 1 and 2.