# 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: ```json { "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.