Skip to content

design: let Editors pick an entry's author - #4175

Open
danielmlr wants to merge 6 commits into
mainfrom
daniel/design-assignable-authors
Open

danielmlr wants to merge 6 commits into
mainfrom
daniel/design-assignable-authors

Conversation

@danielmlr

Copy link
Copy Markdown
Contributor

Design proposal

Proposal: proposals/assignable-authors.md

Editors may change an entry's author, but the admin never shows them the author picker. The picker loads its user list from /admin/users, which only Admins may read, so for an Editor the request fails and the Ownership section stays hidden. This plan adds GET /_emdash/api/content/{collection}/assignable-authors, gated on content:edit_any, the permission the server already checks before an update may change the author. It returns the ID, name and avatar of active users who can create content, and the picker uses it for Admins and Editors alike. /admin/users stays Admin-only.

The plan adds one route and changes no stored data, permission or existing response, so it is filed as a feature plan. The route returns names but never email, so another user without a name shows as "Unnamed user".

Proposal type

  • Feature plan
  • RFC
  • Amendment, supersession, or withdrawal

Related work

Discussion: none. The custom roles RFC (#4156) lists this gap, and its first phase stops the admin offering what the server refuses. With this route the server answers the picker's request, so that phase keeps the picker. The RFC scopes content permissions to collections, so the route sits under the collection.

The editorial comments RFC (#4126) plans a user list for mentions that leaves email out, and this route does the same. The Co-owners idea (#4132) puts a field under Ownership where an Editor picks users, so it needs the same section and a user list that Editors can read.

Readiness

  • The proposal identifies its author and, for an RFC, its champion and Maintainer sponsor
  • The proposal describes observable behavior, compatibility, failure handling, and verification in proportion to its risk
  • Conflicting accepted or pending proposals are reconciled in this pull request (see Related work)
  • This pull request contains no implementation code
  • The proposal status is accepted (check only when ready to merge)

AI assistance

  • This proposal used AI assistance — model/tool: Claude Opus 5.5 (Claude Code)

…nable authors

The picker shows no avatar, /authors sorts by name or email rather than
name then email, and the email question gains the editorial comments RFC's
choice to never return email from its mention list.
Follows the editorial comments RFC's mention list: id, name and avatar only.
Users without a name show as "Unnamed user", search matches names only, and
unnamed users sort last.
The goal said an Editor learns nothing beyond each user's name and avatar, but the response also carries the user's ID, and being in the list shows that a user is active and can write content.
…ble authors

The list of reasons left out authors an Admin picked from today's full user
list (Subscribers) and author IDs set through the update route, which accepts
any ID. "Newly invited" also read as a pending invite, which has no user row
yet and so is not in the new list either.
Editors get IDs, names and avatars of every user who can create content
without users:read. The accepted revision history plan (#4127) shows only the
ID and name of revision authors to anyone who can read drafts, so the bullet
names those two fields rather than claiming the same fields.
@changeset-bot

changeset-bot Bot commented Oct 15, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: c2ecd6d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@cloudflare-workers-and-pages

Copy link
Copy Markdown

🚀 Deploying Preview to Cloudflare 🚀

Preview URL: https://daniel-design-assignable-authors.try.emdashcms.com, https://daniel-design-assignable-authors-emdash-playground.emdash-cms.workers.dev (commit c2ecd6d)

This URL reflects your latest Preview deployment

Preview Deployments by commit

Status Deployment URL Commit Updated (UTC) See this deployment's details
  • Build: Success ✅
  • Deployment: Success ✅

View logs ↗
https://7ab7bf4b.try.emdashcms.com, https://7ab7bf4b-emdash-playground.emdash-cms.workers.dev c2ecd6d 2026-10-15T19:18:08.860Z Visit the dashboard ↗

@github-actions github-actions Bot added the query-count changed PR diff modifies query-count snapshot files label Oct 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Query-count snapshot changes

20 routes changed, total Δ +66 queries.

D1

Route Before After Δ
GET / (cold) 22 24 +2
GET / (warm) 5 8 +3
GET /category/development (cold) 21 24 +3
GET /category/development (warm) 9 12 +3
GET /contributors (cold) 15 19 +4
GET /contributors (warm) 5 8 +3
GET /contributors-naive (cold) 22 26 +4
GET /contributors-naive (warm) 12 15 +3
GET /pages/about (cold) 15 19 +4
GET /pages/about (warm) 5 8 +3
GET /posts (cold) 15 19 +4
GET /posts (warm) 5 8 +3
GET /related (cold) 18 22 +4
GET /related (warm) 8 11 +3
GET /related-baseline (cold) 15 19 +4
GET /related-baseline (warm) 5 8 +3
GET /search (cold) 20 24 +4
GET /search (warm) 10 13 +3
GET /tag/webdev (cold) 21 24 +3
GET /tag/webdev (warm) 9 12 +3

Comparing snapshot files between base and head. Updated automatically on each push.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla: signed query-count changed PR diff modifies query-count snapshot files review/needs-review No maintainer or bot review yet size/M type/design

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant