Zákazníci a skupiny¶
Stav k 2026-06-21
Tabulka uzivatele¶
Jedna tabulka pro zákazníky i admin uživatele. Rozlišení je přes uzivatele_skupiny.admin.
Klíčová pole¶
| Pole | Typ | Popis |
|---|---|---|
id |
int | primární klíč |
uzivatel |
varchar(100) | unikátní login (e-mail) |
heslo |
varchar(32) | MD5 hash hesla |
uzivatel_md5 |
varchar(32) | druhý hash pro HMAC challenge přihlášení |
skupina_id |
int | FK → uzivatele_skupiny.id (práva, admin flag) |
status |
enum | REG = čeká na aktivaci, AKT = aktivní, ZAB = zakázaný |
zeme |
varchar | fakturační adresa — země |
zeme_dod |
varchar | doručovací adresa — země (priorita při EUR logice) |
sk |
tinyint(1) | pravděpodobně příznak SK zákazníka (nepoužívá se aktivně) |
GDPR a marketing¶
| Pole | Popis |
|---|---|
souhlas_novinky |
souhlas se zasíláním newsletteru (1/0) |
gdpr_souhlas_newsletter |
timestamp udělení souhlasu |
gdpr_souhlas_telefon |
timestamp souhlasu s telefonním kontaktem |
gdpr_souhlas_narozeniny |
timestamp souhlasu s narozeninovými e-maily |
gdpr_16let |
datum potvrzení věku 16+ |
neobjednal_5let |
příznak zákazníků bez objednávky 5+ let (nastavuje cron) |
narozeni |
datum narození — pro narozeninové e-maily |
Cron zakaznici-co-5let-neobjednali.php označuje zákazníky s neobjednal_5let=1 a posílá notifikaci před výmazem (GDPR).
Adresy¶
Zákazník má dvě sady adresních polí: fakturační (jmeno, prijmeni, adresa, mesto, …) a doručovací (jmeno_dod, prijmeni_dod, adresa_dod, …). Při přihlášení se doručovací země nastaví do session a ovlivňuje EUR logiku i DPH sazbu.
Skupiny (uzivatele_skupiny)¶
Skupiny řídí přístupová práva, nikoli cenové skupiny.
| Pole | Popis |
|---|---|
skupina |
název skupiny |
admin |
1 = přístup do ADMIN panelu, 0 = frontend zákazník |
uroven |
číselná úroveň oprávnění |
Existující skupiny¶
| id | skupina | admin | uroven |
|---|---|---|---|
| 1 | ADMIN / SUPERADMIN | 1 | 99 |
| 2 | ADMIN / ADMIN | 1 | 95 |
| 9 | ADMIN / EDITACE PRODUKTŮ | 1 | 91 |
| 8 | ADMIN / POBOČKY (vouchery+objednávky) | 1 | 90 |
| 6 | ADMIN / WEBMASTER | 1 | 94 |
| 7 | ADMIN / PREKLAD | 1 | 50 |
| 15 | Stránky | 1 | 35 |
| 11 | Roman L | 0 | 92 |
| 5 | E-SHOP | 0 | 1 |
Skupina id=5 (E-SHOP) je výchozí skupina pro všechny zákazníky.
Skupina id=11 (Roman L) má admin=0 — nemá přístup do administrace — ale vysoký uroven=92. Jde pravděpodobně o historický záznam nebo speciální frontend oprávnění.
Konkrétní oprávnění skupiny jsou v uzivatele_skupiny_prava (M:N na uzivatele_prava). Každé právo odpovídá PAGE klíči v adminu (uzivatele, produkty, apod.).
Přihlášení a session¶
lib/inc.loginLogout.php + lib/function.user.php
Tok:
1. POST → user_info($username) načte uživatele + jeho práva
2. Ověření hesla: HMAC challenge nebo prostý MD5 (starší klienti)
3. Do session: logged (uroven), username, user_id
4. Frontend: nastaví setCurrencyEur() podle zeme_doruceni
Po každém requestu (pokud je session username) se volá user_info() znovu — žádné cachování v session.
Dopad na migraci do Sylius¶
Rozdělení uzivatele na dvě entity
Tabulka uzivatele míchá zákazníky e-shopu a admin uživatele do jedné entity. Sylius je striktně odděluje na ShopUser a AdminUser. Migrace musí záznamy rozdělit podle uzivatele_skupiny.admin — sdílená pole (heslo, email) se migrují odděleně pro každý typ.
Hesla — MD5
Všechna hesla jsou uložena jako MD5 hash (32 znaků). Sylius používá bcrypt/sodium. Hesla nelze převést — při prvním přihlášení je nutný rehash, nebo hromadný reset.
Admin skupiny → Symfony role
7 admin skupin s granulárními právy (per-PAGE klíče v uzivatele_prava) nemá přímý ekvivalent v Sylius. Nutno namapovat na Symfony role nebo použít plugin pro správu oprávnění.
GDPR a marketing — Sylius neřeší
souhlas_novinky, gdpr_souhlas_newsletter, gdpr_souhlas_telefon, gdpr_souhlas_narozeniny, narozeni — Sylius nemá nativní podporu pro marketingové souhlasy ani narozeninové kampaně. Nutno řešit vlastní implementací nebo externím nástrojem (Mailchimp, Klaviyo apod.). Záznamy souhlasů musí být zachovány kvůli GDPR.