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 → Meisterschaft — der 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