synops/docs/proposals/rollebasert_arv.md
vegard b3a55af660 Tre nye proposals: rollebasert arv, Mine ting, chat-merging
- Rollebasert arv: edge-roller styrer trait-synlighet per bruker
  (deltaker ser mikser, lytter ser bare chat)
- Mine ting: oversiktspanel i Hjem, dra node inn i verktøy for
  å koble dem (erstatter mottak som panel)
- Chat-merging: dra chat oppå chat → live flettet visning eller
  snapshot med AI-beriking og brukerprompt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:39:49 +00:00

2.6 KiB

Proposal: Rollebasert arv i samlinger

Konsept

Når en bruker kobles til en samling (podcast, prosjekt, møterom) med en rolle-edge, arver de tilgang til ressurser basert på rollen. Forskjellige roller ser forskjellige traits/paneler.

Problemstilling

I dag gir member_of-edge full tilgang til samlingen. En "lytter" på en podcast ser det samme som en "deltaker" — mikser, opptak, innstillinger, alt. Det er feil. Roller bør styre hva du ser.

Modell

Edge-typer med rolle-semantikk:
  owner        → full tilgang, kan endre alt
  admin        → full tilgang, kan ikke slette samlingen
  deltaker     → ser og bruker verktøy, kan ikke endre innstillinger
  redaksjon    → som deltaker + publiseringskontroll
  lytter       → ser chat og publisert innhold, ikke verktøy
  gjest        → midlertidig, begrenset tidstilgang

Trait-synlighet per rolle

Samlingens metadata utvides med en matrise:

{
  "traits": {
    "chat": { "roles": ["owner", "admin", "deltaker", "redaksjon", "lytter"] },
    "mixer": { "roles": ["owner", "admin", "deltaker"] },
    "recording": { "roles": ["owner", "admin", "deltaker"] },
    "publishing": { "roles": ["owner", "admin", "redaksjon"] },
    "podcast": { "roles": ["owner", "admin", "deltaker", "redaksjon"] },
    "kanban": { "roles": ["owner", "admin", "deltaker", "redaksjon"] }
  }
}

Hvis roles ikke er satt, defaulter til alle roller (bakoverkompatibelt).

Automatisk arv ved tilkobling

Når en bruker kobles til en samling:

  1. member_of-edge opprettes med metadata.role
  2. recompute_access oppdaterer node_access-matrisen
  3. Frontend filtrerer synlige traits basert på rollen
  4. Chat og andre kommunikasjonsnoder med belongs_to-edge til samlingen arves automatisk (bruker ser dem i "Mine ting")

Eksempel: Podcast

Vegard --[owner]--> Sidelinja
  → ser alt: mixer, opptak, publisering, chat, kanban, innstillinger

Trond --[deltaker]--> Sidelinja
  → ser: mixer, opptak, chat, kanban
  → ser ikke: publisering, innstillinger

Lise --[lytter]--> Sidelinja
  → ser: chat, publiserte episoder
  → ser ikke: mixer, opptak, kanban, publisering

Implementering

  1. Legg til metadata.role i member_of-edges
  2. Utvid trait-konfig med roles-array per trait
  3. Frontend filtrerer verktøymeny og paneler basert på rolle
  4. ContextHeader viser kun relevante traits
  5. API-endepunkter validerer rolle ved sensitive operasjoner

Hva som eksisterer allerede

  • Edge-typer med metadata (✓)
  • node_access-matrise (✓)
  • Trait-system med konfig (✓)
  • recompute_access (✓)

Hovedsakelig frontend-filtrering + metadata-utvidelse. Liten backend-endring.