- 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>
86 lines
2.6 KiB
Markdown
86 lines
2.6 KiB
Markdown
# 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.
|