34 Operators and Functions

This chapter provides a detailed reference to the operators and built-in functions supported in Oracle Backend for Firebase security rule expressions. These tools allow developers to write expressive, conditional logic that governs access to backend resources.

34.1 Operators

Operators are used to perform comparisons, logical evaluations, and arithmetic operations within rule conditions.

Logical Operators

Operator Description Example

!a

Logical NOT

!request.auth.email_verified denies access if email is not verified

a && b

Logical AND

request.auth != null && resource.data.uuid == request.auth.uid

a || b

Logical OR

This operator returns true if either a or b is true.

resource.data.isPublic == true || request.auth.uid == resource.data.ownerId

Comparison Operators

Operator Description Example

a == b

Equal

resource.data.category == "Dessert"

a != b

Not equal

resource.data.category != "Dessert"

a > b

Greater than

resource.data.views > 1000

a >= b

Greater than or equal

resource.data.views >= 1000

a < b

Less than

resource.data.views < 1000

a <= b

Less than or equal

resource.data.views <= 1000

a in b

Value a exists in list b

"Dessert" in resource.data.tags

a is type

Type check (For example, is string)

resource.data.title is string

Arithmetic Operators

Operator Description Example

a + b

Addition

resource.data.views + 1

a - b

Subtraction

resource.data.views - 1

a * b

Multiplication

resource.data.price * 2

a / b

Division

resource.data.total / resource.data.count

Additional Operators

Operator Description Example

a[i]

Indexing operator

This operator accesses the element at index i in a list a.

request.resource.data.tags[0] == "chocolate" checks if the first tag in the tags array is "chocolate".

a.f

Field access operator

This operator accesses the field f from object a.

request.auth.token.email == "scott@example.com" accesses the email field inside the nested token object of the authenticated user.

resource.data.content.step2 == "Add extra chocolate chips" accesses the step2 field inside the content map of a document.

34.2 Built-in Functions

Oracle Backend for Firebase security rules support a rich set of functions across different data types.

String Functions

Function Description Example

lower()

Converts to lowercase

"Burger".lower() == "burger"

upper()

Converts to uppercase

"Burger".upper() == "BURGER"

matches()

Regex match

"Chocolate Chip,Corn Flour".matches(".*Flour.*") == true

replace()

Replace substring

"ChocolateChip".replace("Chip", "Coco") == "ChocolateCoco"

split()

Split string into list

"Chocolate,Flour".split(",") == ["Chocolate", "Flour"]

trim()

Remove white (blank) space

" Chocolate ".trim() == "Chocolate"

size()

String length

"Chocolate".size() == 9

List Functions

Function Description Example

concat()

Merge lists

["a"].concat(["b"]) == ["a", "b"]

hasAll()

All elements exist

["a", "b"].hasAll(["a", "b"]) == true

hasAny()

Any element exists

["a", "b"].hasAny(["b", "c"]) == true

hasOnly()

Only specified elements exist

["a", "b"].hasOnly(["a", "b", "c"]) == true

size()

List length

["a", "b"].size() == 2

Timestamp Functions

Function Description Example

year()

Extract year

request.time.year() == 2025

month()

Extract month

request.time.month() == 11

day()

Extract day

request.time.day() == 14

dayOfWeek()

Day of week

request.time.dayOfWeek() == 5

dayOfYear()

Day of year

request.time.dayOfYear() == 318

hours()

Extract hour

request.time.hours() >= 9

minutes()

Extract minutes

request.time.minutes() < 30

seconds()

Extract seconds

request.time.seconds() < 60

nanos()

Extract nanoseconds

request.time.nanos() == 0

toMillis()

Convert to milliseconds

request.time.toMillis() > 1600000000000

Math Functions

Function Description Example

abs()

Absolute value

abs(-5) == 5

ceil()

Round up

ceil(4.2) == 5

floor()

Round down

floor(4.8) == 4

pow()

Power

pow(2, 3) == 8

round()

Round to nearest

round(4.6) == 5

sqrt()

Square root

sqrt(16) == 4

Indexing and Slicing

Operation Example

Access element

request.resource.data.tags[0] == "chocolate"

Slice list

request.resource.data.tags[0:2] == ["chocolate", "chips"]