Glos na zywo po stronie serwera, ikona blokady czatu
Deploy PROD / deploy (push) Successful in 26s

Przyznanie i odebranie glosu oraz oba tryby (otwarty mikrofon, wideo dla
wszystkich) zmieniaja uprawnienia uczestnika przez updateParticipant,
bez ponownego wejscia na sale. Odebranie najpierw wycisza sciezke na
serwerze, wiec dziala takze u klienta, ktory nie odebral zdarzenia.
Sala LiveKit ma staly key; mikrofon wlacza sie sam po przyznaniu glosu.

Rola uczestnika liczona w jednym miejscu (VideoService.participantRole)
dla biletu i zmiany na zywo. RoomPermissionTest pilnuje jawnej listy
zrodel publikacji.

Blokada pisania na czacie ma ikone przekreslonego dymku i znacznik
"bez czatu" zamiast przekreslonego mikrofonu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-28 08:55:24 +02:00
parent e9bb4af59f
commit 515d9a41e2
14 changed files with 465 additions and 75 deletions
+22 -8
View File
@@ -1649,12 +1649,24 @@ Tabela `speak_requests` (V17), kolejka w panelu prowadzenia, temat WebSocket
- **Osobna tabela, nie kolejny typ w `interactions`.** Zgloszenie nie jest
wypowiedzia: nie ma tresci, nie idzie na czat, nie trafia do archiwum.
Ma za to wlasny cykl zycia, ktorego zadna interakcja nie ma.
- **Glos wynika z tokenu, nie ze zgloszenia.** Przyznanie ustawia
`registrations.room_role` na SPEAKER, a mikrofon otwiera dopiero token
wydany u dostawcy. Gdyby wystarczal stan w przegladarce, podmiana odpowiedzi
pozwalalaby mowic bez zgody moderatora. **Po zmianie roli front pobiera
token na nowo**: bez tego uczestnik widzi napis "masz glos" i ma zamkniety
mikrofon.
- **Glos wynika z uprawnien u dostawcy, nie ze zgloszenia.** Przyznanie ustawia
`registrations.room_role` na SPEAKER, a mikrofon otwiera dopiero uprawnienie
nadane przez serwer pokoju. Gdyby wystarczal stan w przegladarce, podmiana
odpowiedzi pozwalalaby mowic bez zgody moderatora.
- **Przy LiveKit uprawnienia zmienia na zywo SERWER** (`RoomPermissionSync`,
`updateParticipant`), bez ponownego wejscia na sale. Wczesniej zmiana szla
wylacznie przez nowy token i przemontowanie sali w przegladarce: odebranie
glosu dzialalo tylko u klienta, ktory posluchal zdarzenia, a kazda zmiana
gasila obraz i dzwiek na chwile. Odebranie najpierw wycisza sciezke
(`mutePublishedTrack`), potem zmienia uprawnienia.
- **Sala LiveKit ma staly `key`.** Nowy token nadal jest pobierany, ale na
polaczonej sali podmiana nic nie robi; sluzy ponownemu wejsciu po zerwaniu.
- **Mikrofon wlacza sie sam po przyznaniu glosu** (`MicOnGrant`), raz na
przyznanie i dopiero po nadaniu uprawnienia przez serwer. Otwarty mikrofon
dla calej sali tego nie robi, bo tam nikt o glos nie prosil.
- **`canPublish=true` z pusta lista zrodel znaczy u LiveKit "wszystkie
zrodla".** Kazda rola publikujaca ma jawna liste; pilnuje tego
`RoomPermissionTest`, sprawdzony w obie strony.
- **Zgloszenie i rola zmieniaja sie w jednej transakcji.** Rozdzielenie daje
uczestnika z rola SPEAKER i bez zgloszenia w kolejce (mikrofon otwarty,
prowadzacy nie wie dlaczego) albo odwrotnie.
@@ -1717,8 +1729,10 @@ Kolumna `webinars.open_mic` (V18), przelacznik w panelu prowadzenia.
nieaktywna, a nie nieaktualna.
- **Wideo zostaje wylaczone takze w tym trybie.** `RoomRole.SPEAKER` to
`canPublishVideo=false`, wiec otwarty mikrofon nie moze wlaczyc nikomu kamery.
- Przelaczenie idzie tematem `speak`, zeby otwarte sale pobraly token na nowo:
bez tego uprawnienie zmienia sie w bazie, a przegladarki dzialaja na starym.
- Przelaczenie zmienia uprawnienia calej sali po stronie serwera
(`RoomPermissionSync.syncWebinar`, w tle, z pominieciem osob bez zmiany)
i idzie tematem `speak`, zeby przegladarki pobraly aktualny token na wypadek
ponownego wejscia.
### Sygnal dzwiekowy w panelu prowadzenia