BUBI.POKER·STAND 11.08.2026·ALLES GEMESSEN, NICHTS GESCHÄTZT

POKER CLOCK + RECHTE

ein Produkt, das jetzt zum ersten Mal weiß, wer wen sehen darf

1Der Weg hinein: Adresse → Anmeldung → Rechte → Daten ein Mensch, vier Tore, ein Wächter
1bubi.pokerCloudflare Pages · 10 Dateien · sw-Cache v24
live-md5 = Platten-md5
index.html — v8.15.0das ganze Produkt in EINER Datei · 1.144.484 Bytes
54 React-Bauteile · 5 Wachen, 404 Prüfungen, 0 FAIL
2Login-Karteseit v8.15.0 der EINZIGE Anmeldeort
E-Mail · Kennwort · Face ID · Mail-Link
3auth.uid()wer bin ich — das Konto, nicht der Club
my_households()DIE Schaltstelle · jede Lese-Regel fragt hier
wer hier steht, sieht — wer nicht, sieht nichts
4RLS · 46 Tabellenhousehold_id in my_households()
6 Clubshouseholds · 4-Zeichen-Kennung
147 Rundenpoker_heim
116 Mitgliederpoker_club_members
2Der Fund des Tages: ZWEI Mitgliedertabellen jedes Mitglied braucht ZWEI Zeilen
my_households()  →  select household_id from household_members
                    where user_id = auth.uid()
  • household_members — entscheidet, WAS jemand sieht. role: admin/member. display_name NOT NULL 9
  • poker_club_members — nur Poker-Rolle + Spieler-Kennung. keine Wirkung auf die Sicht 115

Wer nur in poker_club_members steht, sieht NICHTS — nicht einmal den eigenen Club. pok_ist_runden_admin() sagt trotzdem „du darfst“, und die Abfrage liefert null Zeilen. Am lebenden Fall gemessen: Chantal ohne zweite Zeile 0 Clubs, 0 Runden — mit zweiter Zeile 1 Club, 15 Runden, 21 Mitglieder.

3Der Wächter, heute erweitert
create or replace function my_households()
returns setof uuid
language sql stable security definer
set search_path to 'public' as $$
  select id from households
  where is_super_admin()
  union
  select household_id from household_members
  where user_id = auth.uid()
$$;

EINE Stelle statt vieler. Der Superadmin kommt hier hinein, nicht in jede einzelne Policy — dann gibt es keine, die man vergisst. SECURITY DEFINER heißt: das select auf households läuft ohne RLS, also keine Rekursion über hh_select.

Migration superadmin_sieht_alle_clubs 11.08.2026
4Sieben Rollen — was heute wirklich belegt ist eine Rolle, die nur in der Doku steht, ist keine Rolle
Superadmin1 · norbert@bubi.poker · sieht 6/147/116 Admin Software1 · block@bubi.poker · 0 Clubs, 0 Runden Admin Lizenzinhaber7 owner-Zeilen · 6 × Norbert, 1 × Chantal Floor0 — nur im Code Dealer0 — nur im Code Spieler110 member · meist BV-Namen ohne Konto Zuschauerpoker-tv · kein Konto · das saubere Muster

Heute zum ersten Mal beweisbar. Bis zum Vormittag trug Norberts einziges Konto Superadmin UND Lizenzinhaber — an ihm ließ sich eine Trennung grundsätzlich nicht messen. Nach dem Umhängen um 11:20 UTC: norbert@famraible.de sieht weiter seine 6 Clubs, is_super_admin() liefert false. block@bubi.poker und chantal@bubi.poker bleiben dicht. Reihenfolge eingehalten: erst der bewiesene Login (11:16 UTC), dann der Befehl — die Bedingung stand im Befehl selbst.

5Vier Tore hinein v8.15.0: keins mehr versteckt
  • Kennwort — signInWithPassword. Seit heute sichtbar unter der E-Mail STANDARD
  • Face ID — signInWithPasskey. Der schnellste Weg 2 Stellen
  • E-Mail-Link — signInWithOtp + 6-stelliger Code 4 Stellen
  • Einladungs-Code — ?code=… · alle 6 Clubs haben einen FERTIG
  • TV-Code — ?tv=CODE · 24 h · ganz ohne Konto FERTIG

Der Standardweg war der einzige verborgene. Kennwort und „Anmelden“ standen hinter der Klappe „Ich bin Turnierleiter“, unter dem Bildschirmrand — Face ID und Mail-Link standen offen. Dieselbe Lehre wie bei Face ID am 10.08. Die Klappe ist ersatzlos weg.

⛔ nicht gemessen: ob @bubi.poker-Post ankommt
6Die Falle, die niemand sah heute gefunden und repariert
error finding user: sql: Scan error on column
index 3, name "confirmation_token":
converting NULL to string is unsupported

Per SQL angelegte Konten hatten NULL in vier Token-Spalten, wo Supabase eine leere Zeichenkette erwartet. Die Anmeldung brach ab, bevor das Kennwort geprüft wurde — auf dem Bildschirm stand nur „Unable to process request“. Der Fehlertext zeigte in die falsche Richtung: es sah nach falschem Kennwort aus.

  • norbert@ · block@ · chantal@bubi.poker kaputt
  • über die App angelegte Konten liefen
update auth.users set confirmation_token='',
  recovery_token='', email_change_token_new='',
  email_change='' where confirmation_token is null;
7Was fehlt — acht gemessene Lücken in der Reihenfolge, in der sie sich blockieren
  • 1 · Stammspieler-Namen — die Brücke „Name vor Ort → Konto später“. Ohne sie sind „Heike“ und „heike“ zwei Leute 0/116
  • 2 · Runde → Meisterschaftder Engpass. Keine der 147 Runden hängt an irgendetwas 0/147
  • 3 · Verlauf halb da — KO/Rebuy/Add-on ja; Level, Uhrzeit, All-ins, Re-Entries fehlen. Rückwirkend nicht zu retten halb
  • 4 · Ligen sind keine — poker_ligen hat household_id, also gehört jede „Liga“ EINEM Club. Der Länder Cup hängt falsch an Kärnten 8 Zeilen
  • 5 · Floor + Dealer — im Code vorhanden, in den Daten niemand 0 + 0
  • 6 · Superadmin-Sicht — heute repariert; die Policy kannte nur Mitglied und Inhaber erledigt
  • 7 · 8 Tabellen ohne Regel — RLS an, 0 Policies. Nachgemessen: kein Loch, sondern ein Schloss. Nur 3 tragen Daten (poker_einladung_codes 6 · push_anmeldung_gesehen 6 · jarvis_einstellungen 1) und sind ausschliesslich ueber SECURITY-DEFINER-Funktionen erreichbar. Die 5 bv2_import_*/sim-Tabellen sind leer geklaert
  • 8 · Was der Admin Software darf — die Tabelle allein gibt noch keine Rechte offen
Beta Phase 1 · 16.09.2026 Drucktermin gestrichen

Fünf Regeln, an denen heute alles hing

Nie raten, nur Wahrheiten · was nicht messbar ist, heißt „nicht messbar“
Version zuerst · vor jedem Deploy erhöhen, danach live gegen die Platte messen
Eine Etappe ist fertig, wenn ihr Messpunkt grün ist — nicht, wenn der Code steht
Immer mit dem Konto testen, das am meisten sieht — und mit einem, das nichts sieht
Wer einen Knopf verschiebt, zieht JEDE Anleitung mit

Vier Fallen derselben Familie · Rollen-Falle 10.08. · Hooks-Fehler 11.08. · zwei Mitgliedertabellen 11.08. · NULL-Token 11.08.
jede sah richtig aus und fiel nur bei einem Konto auf, das nicht Norberts altes war
gemessen am 11.08.2026 · DB qzxbjsxoekwnijkhybtm · index.html v8.15.0 · sw-Cache v24 · 404 Prüfungen, 0 FAIL
bubi.poker · Uhr /?go=uhr · TV /?tv=CODE