Rovnaký výraz sa spustí nad každým prípadom. Testovacie údaje sú pevné, takže nemožno vynechať hranice ani chybové situácie.
Vysvetlené riešenie
Zobraziť celý výraz
user.active && user.role in ['editor', 'admin'] && (resource.public || user.teams.exists(team, team == resource.ownerTeam))
Prečo riešenie funguje
Kontrola účtu a roly je povinná vždy.
Zátvorky zoskupia dve alternatívne cesty k zdroju.
exists() porovná každý názov tímu s resource.ownerTeam.
Vonkajší && zabráni tomu, aby verejný zdroj obišiel kontrolu účtu a roly.
Čo dokazujú testovacie prípady
Editor a verejný zdroj: očakáva sa true (bool).
Súkromný zdroj vlastného tímu: očakáva sa true (bool).
Súkromný zdroj cudzieho tímu: očakáva sa false (bool).
Neaktívny správca: očakáva sa false (bool).
Prípady sú zámerne rozdielne. Riešenie, ktoré prejde iba prvým prípadom, ešte nezapracovalo celé pravidlo.
Častá chyba
Výraz neprispôsobujte iba prvému úspešnému vstupu. Požiadavka je zapracovaná až vtedy, keď kladný, záporný aj hraničný prípad vytvoria určený výsledok.
Kontrolná otázka
Viete ukázať presnú časť riešenia, ktorá spôsobí zlyhanie každého nepravdivého testu? Ak dve rozdielne zlyhania závisia od rovnakej podmienky, vysvetlite prečo.
Hlavná myšlienka
Viete zátvorkami oddeliť alternatívne cesty k rovnakému oprávneniu.
Zdroje
CEL-DEV — oficiálny prehľad CEL.
CEL-LANG — oficiálna definícia jazyka CEL pre operátory, typy, makrá, prítomnosť, reťazce a časové hodnoty použité v tejto úlohe.