--- title: Správa tenantů section: Administrace sectionOrder: 60 order: 0 summary: Průvodce administrátora edumeal správou tenantů (provozovatelů) -- vytváření a deaktivace tenantů, správa jejich operátorů, správa administrátorů a multi-tenancy izolace dat. --- # Správa tenantů Administrátor systému edumeal spravuje tenanty - provozovatele školního stravování, kteří v rámci jedné instalace edumealu fungují vedle sebe a navzájem o sobě nevědí. Tato stránka popisuje funkce dostupné administrátorovi na stránce **Správa systému**. ## Role administrátora Administrátor má systémovou roli `admin` - nepatří k žádnému konkrétnímu tenantovi a může se pohybovat napříč všemi. Navigace je svislý panel po levé straně (stejně jako u operátora) rozdělený do skupin: - **Tenanti** - správa provozovatelů a jejich operátorů - **Správa** - **Administrátoři** (správa ostatních administrátorů, viz níže) a [**Funkce**](/docs/admin/features) (zapínání volitelných modulů) - **Nutriční data** - [**Párování surovin**](/docs/admin/nutrition) a [**Nutriční katalog**](/docs/admin/nutrition) (centrální nutriční databáze) - **Reporty** - [**Statistika provozů**](/docs/admin/stats) (počty strávníků napříč provozy) a [**Statistika e-mailů**](/docs/admin/email-audit) (přehled odeslaných e-mailů napříč všemi provozy) - **Systém** - **Nastavení** (vlastní zabezpečení účtu a systémová nastavení) Vše ostatní (denní provoz, jídelníčky, strávníky, čipy, ceníky, kuchyně, finance) si v rámci svého tenanta řídí [operátoři](/docs/operator), které administrátor zakládá. ## Co je tenant Tenant reprezentuje jednoho provozovatele školního stravování - typicky: - Město nebo obec provozující školní jídelny - Skupina škol se společným zřizovatelem - Samostatná školní jídelna - Soukromý provozovatel stravovacích služeb Mezi tenanty je v databázi tvrdá izolace - uživatelé, strávníci, výdejní místa, kuchyně, jídelní lístky i finanční data jednoho tenanta nejsou viditelné z jiného tenanta. Operátor, rodič nebo organizace vidí pouze data svého tenanta a v UI nemá indikátor, že systém slouží více organizacím najednou. ## Seznam tenantů Hlavní stránka **Správa systému** zobrazuje stránkovaný seznam všech tenantů. Pro každý řádek jsou vidět: - **Název** - obchodní jméno provozovatele - **IČO** - identifikační číslo organizace - **Reg. kód** - registrační kód provozu, kterým se rodiče sami registrují (viz detail tenanta) - **Email** - kontaktní e-mail - **Stav** - _Aktivní_ nebo _Neaktivní_ (deaktivovaní tenanti jsou v seznamu zašedlí) Kliknutím na řádek se otevře postranní panel s detailem tenanta a seznamem jeho operátorů. ## Vytvoření nového tenanta Tlačítkem **Přidat tenanta** v pravém horním rohu otevřete formulář. | Pole | Popis | Povinné | | --- | --- | --- | | Název společnosti | Obchodní jméno provozovatele (např. „Sodexo s.r.o." nebo „Město Brno – školní jídelny") | Ano | | IČO | Identifikační číslo organizace | Ne | | Kontaktní email | E-mail pro komunikaci s provozovatelem | Ne | Po stisku **Uložit** se tenant vytvoří jako _Aktivní_ a automaticky se mu vygeneruje **registrační kód** pro samoregistraci rodičů (viz _Detail tenanta_). Aby v něm šlo cokoli dělat, musíte přidat alespoň jednoho operátora (viz níže). > **Bankovní účty:** Účty pro dobíjení kreditu se nastavují v detailu tenanta (sekce _Bankovní účty pro dobíjení_), ne přímo ve formuláři vytvoření. Tenant jich může mít víc a jsou rovnocenné; který z nich rodič uvidí, se řídí povolením na jeho výdejním místě. Účty si může spravovat i operátor sám v _Nastavení provozu_ - viz [Bankovní účty pro dobíjení](/docs/operator/settings#bankovní-účty-pro-dobíjení). ## Detail tenanta a úprava V detail panelu vidíte IČO, kontaktní email, stav, **registrační kód** a sekci **Bankovní účty pro dobíjení**, kde můžete účty přidávat, upravovat a mazat. Při přidávání účtu je k dispozici i volba **„Povolit na všech výdejních místech"** tenanta. U aktivních tenantů jsou k dispozici dvě tlačítka: - **Upravit** - otevře formulář se stejnými poli jako při vytvoření. - **Deaktivovat** - viz následující sekce. ### Údaje na tištěných dokumentech Formulář tenanta má sekci **Údaje na tištěných dokumentech** se třemi poli: **sídlo**, **web** a **zápis v obchodním rejstříku**. V aplikaci se nikde nezobrazují - jdou výhradně na papír: - do **hlavičky přihlášky ke stravování**, kterou tiskne operátor (viz [Správa strávníků a uživatelů](/docs/operator/users#přihláška-ke-stravování)), - k **Dodavateli** na dodacím listu, kde se dosud tisklo jen jméno a IČO. Nevyplněný údaj se nevytiskne - řádek se prostě neobjeví. U provozů založených dřív jsou tato pole prázdná, dokud je někdo nedoplní, a jejich dokumenty zatím vypadají stejně jako předtím. ### Registrační kód V detailu tenanta se zobrazuje jeho **registrační kód** spolu s tlačítkem **Přegenerovat**. Rodiče se pomocí tohoto kódu sami registrují do daného provozu (self-registrace) - místo veřejného seznamu škol zadají při registraci kód, který jim provoz předá, a tím se přiřadí ke správnému tenantovi. Kód se vygeneruje automaticky při vytvoření tenanta; ručně se needituje. Tlačítkem **Přegenerovat** ho můžete vyměnit za nový - po přegenerování **starý kód i odkaz okamžitě přestanou platit**, takže ho použijte, pokud se kód dostal k nepovolaným osobám. ## Deaktivace tenanta Pokud provozovatel ukončí používání systému, administrátor jeho tenanta deaktivuje. Deaktivace je reverzibilní - žádná data se nemažou. Po deaktivaci: - Uživatelé z daného tenanta se nemohou přihlásit (token-refresh selže). - API odmítne mutující operace patřící tenantovi. - Historické záznamy (objednávky, transakce, audit log) zůstávají uložené. - V seznamu tenantů je řádek zašedlý a v detailu zmizí tlačítka _Upravit_ a _Deaktivovat_. Re-aktivace dnes není v UI samostatným tlačítkem - v případě potřeby kontaktujte technickou podporu. ## Operátoři tenanta V detailu tenanta najdete sekci **Operátoři** se seznamem všech operátorů, kteří daného tenanta spravují. U každého vidíte jméno, e-mail a stav (_Aktivní_ / _Neaktivní_) plus tlačítko na přepnutí stavu. ### Přidání operátora Tlačítko **Přidat operátora** otevře formulář, který začíná **e-mailem**. Podle něj se přizpůsobí: - **E-mail už v systému existuje** (např. rodič nebo operátor v jiném provozu) → formulář to pozná a jen mu _přidá operátorskou roli v tomto provozu_. Heslo ani jméno se nezadává a nemění - uživatel se přihlašuje svým stávajícím účtem. Jeho přístupy v ostatních provozech zůstávají nedotčené. - **Nový e-mail** → doplní se **jméno, příjmení a počáteční heslo** (min. 8 znaků) a založí se nový účet. Ten dostane uvítací e-mail s přihlašovacími údaji. Nový operátor je rovnou aktivní a přiřazený k tenantu, ve kterém jste ho přidali. Tentýž e-mail může být operátorem ve více provozech současně - viz poznámka o účtech napříč tenanty níže. ### Aktivace a deaktivace operátora Tlačítka **Aktivovat** / **Deaktivovat** u každého řádku přepínají přístup operátora. Deaktivovaný operátor se nemůže přihlásit a v seznamu je viditelně zašedlý. > **Pozor:** Pokud deaktivujete posledního aktivního operátora tenanta, denní provoz daného provozovatele se zastaví - nikdo nebude moci vytvářet jídelníčky, schvalovat rodiče, dobíjet kredity ani generovat sestavy. Před deaktivací posledního operátora se ujistěte, že máte připraveného nástupce. > **Účty napříč více tenanty:** Jeden účet (e-mail) může být operátorem ve více provozech zároveň, případně i administrátorem. **Deaktivace** vypíná celý účet, proto je u takových sdílených účtů zablokovaná - místo ní použijte **Odebrat z provozu**, které odebere operátorskou roli jen v tomto tenantu a přístupy v ostatních tenantech zachová. Účet se archivuje (resp. deaktivuje) teprve tehdy, když odeberete jeho _poslední_ přístup. Stejně se chová i odebrání ze seznamu **Administrátorů**: u účtu, který je zároveň operátorem či rodičem, se odebere jen administrátorská role a zbylé role zůstanou. ### Odebrání operátora z provozu U každého operátora je tlačítko **Odebrat z provozu**. To je doporučený způsob, jak operátora z tenantu vyřadit: odebere mu operátorskou roli _jen v tomto provozu_. Pokud má účet přístup i jinde (jiný provoz, rodič, administrátor), zůstane mu zachován; pokud šlo o jeho poslední přístup, účet se archivuje. Na rozdíl od **Smazat** nejde o nevratné smazání dat - operátora lze později znovu přidat se stejným e-mailem. ### Trvalé smazání operátora (GDPR čl. 17) Vedle toho se u každého operátora zobrazuje červené tlačítko **Smazat**. Jde o stejný GDPR-erasure flow, který je popsaný v [průvodci pro operátory](/docs/operator/users), jen aplikovaný shora - admin může smazat operátora libovolného tenanta bez nutnosti tam operátorem přihlašovat. Po potvrzení dialogu: - **Jméno, e-mail a telefon** operátora se přepíšou na placeholder (`erased-@edumeal.invalid`) - operace je nevratná. - **Všechny aktivní přihlašovací tokeny** operátora okamžitě přestanou platit. - **Nedoručené e-maily** určené tomuto operátorovi (např. pozvánka, reset hesla) se v notifikační frontě zruší. - **E-mail se uvolní** pro novou registraci v jakémkoli tenantu. - **Audit log** všech akcí, které operátor provedl, zůstane - referencuje jen `user_id` (UUID), ne e-mail. Auditní stopa je explicitní výjimka z práva na výmaz (GDPR čl. 17(3)(b) - splnění právní povinnosti). > **Použít rozumně:** pro běžné „operátor odešel, ať nemá přístup" stačí _Deaktivovat_. Trvalé smazání pouštějte jen po doložené žádosti subjektu nebo po vypršení retenční lhůty. ## Správa administrátorů Záložka **Administrátoři** slouží ke správě ostatních systémových administrátorů. Administrátoři jsou _bez tenantu_ - mají přístup napříč všemi provozovateli, takže se nezakládají v detailu konkrétního tenanta jako operátoři, ale tady samostatně. Stránka zobrazuje stránkovaný seznam všech administrátorů; u každého vidíte jméno, e-mail a stav (_Aktivní_ / _Neaktivní_). Váš vlastní účet je v seznamu označený „(vy)". ### Přidání administrátora Tlačítko **Přidat administrátora** otevře formulář: | Pole | Popis | Povinné | | --- | --- | --- | | Jméno | Křestní jméno administrátora | Ano | | Příjmení | Příjmení administrátora | Ano | | Email | Přihlašovací e-mail - musí být unikátní v rámci celého systému | Ano | | Heslo | Počáteční heslo (minimálně 8 znaků). Administrátor si ho po prvním přihlášení změní v profilu. | Ano | Nový administrátor je rovnou aktivní, není přiřazený k žádnému tenantovi a přihlašovací údaje mu pošleme e-mailem. Po přihlášení má stejná oprávnění jako vy. ### Aktivace a deaktivace administrátora Kliknutím na řádek otevřete detail s tlačítkem **Aktivovat** / **Deaktivovat**. Deaktivovaný administrátor se nemůže přihlásit a v seznamu je zašedlý. > **Vlastní účet nelze deaktivovat.** U svého řádku tlačítko Deaktivovat nenajdete - je to pojistka, aby systém nezůstal bez aktivního administrátora. Pokud potřebujete sebe odebrat, ať vás deaktivuje jiný administrátor. ### Zabezpečení administrátora V detailu administrátora se pod sekcí **Zabezpečení** zobrazuje stav jeho dvoustupňového ověření (MFA) - zda má nastavený **autentikátor** (a od kdy), počet zbývajících **záložních kódů** a počet registrovaných **přístupových klíčů (passkeys)**. Pokud ověření nastavené nemá, je označené jako _Nenastaveno_. K dispozici jsou dvě akce: - **Resetovat heslo** - odešle administrátorovi e-mail s odkazem pro obnovu hesla. Heslo mu tedy nezadáváte ručně; nastaví si ho sám přes odkaz. - **Resetovat MFA** - smaže jeho ověřovací prvky (autentikátor, passkeys i záložní kódy). Při příštím přihlášení si MFA nastaví znovu. Použijte, když administrátor ztratí přístup ke všem svým ověřovacím prvkům. Tlačítko je nedostupné u účtu, který zatím žádné MFA nastavené nemá. ## Nastavení generování náhledů fotografií V administraci na záložce **Nastavení** je sekce **Náhledy fotografií jídel**, kterou řídíte worker generující zmenšené náhledy fotografií na pozadí: - **Generovat náhledy na pozadí** - hlavní vypínač. Když je vypnutý, náhledy se negenerují (v jídelníčku se použije originál). - **Počet workerů na instanci** - prázdné = **jeden worker celkově** (běží na jedné instanci; bezpečné, paměťově nenáročné, výchozí). Vyplněné číslo **N** = **N workerů na každé instanci** (vyšší průchodnost, ale vyšší nároky na paměť). Změna se projeví do několika sekund bez restartu. Výchozí (prázdné) doporučujeme ponechat, pokud nemáte konkrétní důvod generování zrychlit. ## Odeslání testovacího e-mailu V administraci na záložce **Nastavení** je sekce **Test e-mailu**, kterou ověříte, že doručování e-mailů funguje. Zadejte cílovou e-mailovou adresu a stiskněte **Odeslat testovací e-mail** - na zadanou adresu dorazí krátká zkušební zpráva. Hodí se po nasazení nebo změně konfigurace odesílání e-mailů (SMTP, směrování), kdy potřebujete ověřit doručování cíleně a okamžitě, místo abyste čekali na skutečnou provozní notifikaci. Zkušební e-mail se nikam neukládá a neváže se k žádnému tenantovi. ## Multi-tenancy v praxi Systém edumeal je navržen tak, aby jedna instalace obsluhovala libovolný počet tenantů. Co každý tenant „má své": - **Uživatele a strávníky** - rodiče i strávníci jednoho tenanta nevidí účty z jiného. - **Výdejní místa a kuchyně** - organizační struktura je specifická pro tenant. - **Jídelní lístky a recepty** - každý tenant si je spravuje samostatně. - **Ceníky** - ceny obědů se nastavují per tenant + výdejní místo + věková kategorie. - **Kreditní účty a transakce** - finance jsou izolované. - **Audit log** - záznamy o přihlášeních, dobitích a operátorských akcích jsou taggované tenantem. Administrátor vidí všechny tenanty a může mezi nimi přepínat. Operátoři, rodiče i strávníci vidí pouze data svého tenanta. ## Bezpečnost Administrátorská role je systémově nejprivilegovanější - má přístup ke všem tenantům a všem operátorům. Doporučení pro provoz: - Přihlašujte se silným heslem; přístupový token žije v paměti prohlížeče, refresh token v `HttpOnly` cookie se zámkem `SameSite=Strict`. - Citlivé akce (přihlášení, vytvoření tenanta, dobití kreditu, objednávky) jsou logované do auditní tabulky se zdrojovou IP a user-agentem. - Pravidelně procházejte seznam tenantů a aktivních operátorů - jednoho aktivního operátora by měl mít každý produkční tenant, víc na záskoky. ## Časté otázky ### Kolik tenantů systém zvládne? Architektura počítá s desítkami až stovkami tenantů na jedné instalaci. Datová izolace je zajištěna na úrovni SQL (`tenant_id` filtr v každém repository dotazu) - výkon jednoho tenanta nemá vliv na ostatní. ### Můžu přenést data mezi tenanty? Aktuálně to není v UI - data jsou pevně vázána na konkrétního tenanta. Pokud potřebujete fúzi nebo přesun, kontaktujte technickou podporu. ### Jak se admin liší od operátora? Admin spravuje _strukturu_ - tenanty a jejich operátory. Operátor spravuje _provoz_ - v rámci svého tenanta dělá vše ostatní (strávníci, jídelníčky, objednávky, ceníky, kuchyně, finance). Admin nemá v UI provozní obrazovky - pokud potřebuje vidět konkrétní jídelníček nebo strávníka, musí to dělat skrz operátora daného tenanta.