Souhrnná úloha – Systém přihlášení a oprávnění

Stránky: Moodle ZČU
Kurz: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Kniha: Souhrnná úloha – Systém přihlášení a oprávnění
Vytiskl(a): Nepřihlášený host
Datum: neděle, 18. října 2026, 13.19

Úloha - Systém přihlášení a oprávnění

Zadání (kontext úlohy)

Máš napsat kontrolní funkci, která rozhoduje, zda má uživatel přístup k administrátorské části systému.
Podmínky jsou trochu zamotané, kód obsahuje chyby a je nepřehledný.
Tvým úkolem je kód opravit a zrefaktorovat, aby byl čitelný a spolehlivý.


Cíl úlohy

Procvičíš všechny dovednosti ze semináře:

  • použití logických operátorů &&, ||, !,

  • zkrácené vyhodnocování (short-circuit),

  • kombinování více podmínek s jasnou prioritou,

  • opravu typických chyb v podmínkách,

  • refaktoring do pojmenovaných predikátů a guard clauses.


Vstupní podmínky
  • Pracuješ pouze se souborem script.js.


Požadovaný výstup
  1. Oprav kód tak, aby správně fungoval podle pravidel níže.

  2. Zaveď predikáty (pojmenované pomocné funkce/konstanty) jako:

    • jePrihlasen

    • jePrivilegovan

    • neniBlokovan

    • maSouhlas

    • neniZakazano

  3. Použij strážné podmínky (guard clauses) – při nesplnění dílčí podmínky vrať false co nejdříve.

  4. Ošetři, aby se funkce nikdy nepokoušela číst vlastnost objektu, pokud je null (využij short-circuit).

  5. Používej závorky pro přehlednost a piš krátké komentáře k méně jasným částem.


Pravidla pro přístup
  • Uživatel musí být přihlášen.

  • Jeho role musí být „admin“ nebo „editor“.

  • Účet nesmí být blokovaný.

  • Musí mít souhlas se zpracováním dat.

  • Nesmí platit globální zákaz přístupu (cfg.zakazPristupu).


Doplňující pokyny
  • V původním kódu je chybná negace a chybějící závorky – oprav je.

  • Původní podmínky jsou zbytečně dlouhé – rozděl je na predikáty a použij guard clauses.

  • Na konci funkce vrať true pouze pokud jsou všechny podmínky splněny.


Soubor

Odkaz na js soubor

Řešení úlohy - Systém přihlášení a oprávnění

Co je zde splněno

  • Použili se predikáty jePrihlasen, jePrivilegovan, neniBlokovan, maSouhlas, neniZakazano s ochranou proti null (short-circuit).

  • Použity guard clauses – při nesplnění podmínky se funkce ihned vrací false, bez hlubokého vnoření.

  • Kontrola rolí je řešena tabulkově přes Set.has.

  • Negace je pouze tam, kde dává smysl (např. neniZakazano), složitější výrazy jsou rozděleny do srozumitelných kroků.

  • Výsledkem je true pouze tehdy, když jsou všechny požadované podmínky splněny.

Poznámky

  • Původní podmínka trpěla chybnou negací a chybějícími závorkami (!uzivatel.prihlasen && uzivatel.role === "admin" || ...) – po rozdělení do predikátů jsou priority podmínek zřejmé.

  • Predikáty jsou bez vedlejších efektů, takže je lze snadno testovat a znovu použít.