Files
RenewCMS/docs/design/sites-authors-slices.md

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_id on the article). No per-site publish state: is_online stays 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 or none).
  • 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

  1. 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).
  2. Sites and Authors screens plus the shared directory pieces (DirectoryFrame.dc.html). Existing Editor, Articles and Profile screens are not changed here.
  3. 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.