Decide the RBAC model: token-claim roles vs stored per-publisher roles, and admin bootstrap #27

Closed
opened 2026-09-19 19:58:49 +00:00 by toasterson · 1 comment
Owner

Part of #24

Maintainer decisions — 2026-09-22

Deferred beyond v1 by the maintainer: local ingestion suffices, and CI will deliver a completed multi-package .p5p and notify an import script (#38). Authenticated REST publishing, its OIDC/RBAC decisions and provider provisioning are not v1 release gates. Preserve this ticket and its research/dependencies for later work; no later milestone was selected. Do not provision credentials or an identity provider as part of v1.

These decisions supersede conflicting earlier scope below. This update records maintainer decisions, not implementation or test completion.

Earlier brief and context

Question

Who may publish to which publisher, and where is that decided? The plan proposes admin / publisher / reader roles stored in {repo}/publisher/{name}/rbac.db and granted via /admin/rbac/* endpoints; the existing middleware already parses a roles claim from the JWT.

Grill on:

  • Source of truth: roles stored in the repository (plan), roles asserted by the IdP in token claims (e.g. ips_publishers, Forgejo/Keycloak groups), a static mapping in pkg6depotd.kdl, or a hybrid (claims for identity, stored grants for authorization).
  • Bootstrap: how the first admin is created (config file, CLI on the server host over the admin unix socket, first-token-wins?).
  • Granularity: per publisher only, or also per package stem / per operation (publish, delete, manage roles)?
  • Global admin scope for operators vs per-publisher admins.
  • Auditability: is a grant/revoke log required for v1?
  • Interaction with unauthenticated read access (the depot stays anonymous-readable for pkg(1)).

Blocked by the release scope (does v1 need RBAC at all?) and by the IdP decision (which claims exist). Record as an ADR; the resolution should let /to-tickets slice #19.

Part of #24 ## Maintainer decisions — 2026-09-22 Deferred beyond v1 by the maintainer: local ingestion suffices, and CI will deliver a completed multi-package .p5p and notify an import script (#38). Authenticated REST publishing, its OIDC/RBAC decisions and provider provisioning are not v1 release gates. Preserve this ticket and its research/dependencies for later work; no later milestone was selected. Do not provision credentials or an identity provider as part of v1. These decisions supersede conflicting earlier scope below. This update records maintainer decisions, not implementation or test completion. <details> <summary>Earlier brief and context</summary> ## Question Who may publish to which publisher, and where is that decided? The plan proposes `admin` / `publisher` / `reader` roles stored in `{repo}/publisher/{name}/rbac.db` and granted via `/admin/rbac/*` endpoints; the existing middleware already parses a `roles` claim from the JWT. Grill on: - Source of truth: roles stored in the repository (plan), roles asserted by the IdP in token claims (e.g. `ips_publishers`, Forgejo/Keycloak groups), a static mapping in `pkg6depotd.kdl`, or a hybrid (claims for identity, stored grants for authorization). - Bootstrap: how the first admin is created (config file, CLI on the server host over the admin unix socket, first-token-wins?). - Granularity: per publisher only, or also per package stem / per operation (publish, delete, manage roles)? - Global admin scope for operators vs per-publisher admins. - Auditability: is a grant/revoke log required for v1? - Interaction with unauthenticated read access (the depot stays anonymous-readable for `pkg(1)`). Blocked by the release scope (does v1 need RBAC at all?) and by the IdP decision (which claims exist). Record as an ADR; the resolution should let `/to-tickets` slice #19. ## Links - Informs #19 </details>
forge removed this from the Release 1 (server only) milestone 2026-09-22 12:12:48 +00:00
Author
Owner

Closed as out of scope for Release 1 (wayfinder): remote publication, OIDC and RBAC are deferred with no target release (maintainer, 2026-09-22; ADR-004, ADR-015). Deciding the RBAC model has nothing to unblock until then. The research in #33 and the design in docs/ai/plans/2026-04-09-publish-api-oidc.md remain the starting point when this is re-charted.

Closed as **out of scope for Release 1** (wayfinder): remote publication, OIDC and RBAC are deferred with no target release (maintainer, 2026-09-22; ADR-004, ADR-015). Deciding the RBAC model has nothing to unblock until then. The research in #33 and the design in `docs/ai/plans/2026-04-09-publish-api-oidc.md` remain the starting point when this is re-charted.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
OpenIndiana/ips#27
No description provided.