CEL language preview
1. An authorization check
the has macro, field access, and a ternary expression
horizon-dark
// admin or verified owner may edit
has(request.auth) &&
(request.auth.role == "admin" ||
(request.auth.uid == resource.owner && resource.verified))
? "allow"
: "deny" atom-one-dark
// admin or verified owner may edit
has(request.auth) &&
(request.auth.role == "admin" ||
(request.auth.uid == resource.owner && resource.verified))
? "allow"
: "deny" github-dark
// admin or verified owner may edit
has(request.auth) &&
(request.auth.role == "admin" ||
(request.auth.uid == resource.owner && resource.verified))
? "allow"
: "deny" dracula
// admin or verified owner may edit
has(request.auth) &&
(request.auth.role == "admin" ||
(request.auth.uid == resource.owner && resource.verified))
? "allow"
: "deny" nord
// admin or verified owner may edit
has(request.auth) &&
(request.auth.role == "admin" ||
(request.auth.uid == resource.owner && resource.verified))
? "allow"
: "deny" github
// admin or verified owner may edit
has(request.auth) &&
(request.auth.role == "admin" ||
(request.auth.uid == resource.owner && resource.verified))
? "allow"
: "deny" 2. Comprehension macros
all and exists over a list
horizon-dark
all(items, item, item.price > 0) &&
exists(items, item, item.category == "sale") atom-one-dark
all(items, item, item.price > 0) &&
exists(items, item, item.category == "sale") github-dark
all(items, item, item.price > 0) &&
exists(items, item, item.category == "sale") dracula
all(items, item, item.price > 0) &&
exists(items, item, item.category == "sale") nord
all(items, item, item.price > 0) &&
exists(items, item, item.category == "sale") github
all(items, item, item.price > 0) &&
exists(items, item, item.category == "sale") 3. Type conversions and membership
duration, timestamp, and the in operator
horizon-dark
timestamp("2024-01-01T00:00:00Z") + duration("24h") > request.time &&
"admin" in request.auth.roles atom-one-dark
timestamp("2024-01-01T00:00:00Z") + duration("24h") > request.time &&
"admin" in request.auth.roles github-dark
timestamp("2024-01-01T00:00:00Z") + duration("24h") > request.time &&
"admin" in request.auth.roles dracula
timestamp("2024-01-01T00:00:00Z") + duration("24h") > request.time &&
"admin" in request.auth.roles nord
timestamp("2024-01-01T00:00:00Z") + duration("24h") > request.time &&
"admin" in request.auth.roles github
timestamp("2024-01-01T00:00:00Z") + duration("24h") > request.time &&
"admin" in request.auth.roles