in Operator

Before we work on the Team model, let’s talk a bit about Keel’s permission system, specifically the in operator.

Permissions are crucial for any SAAS application and Keel caters for permissions out of the box.

Within Keel's permission (opens in a new tab) system, the in operator helps in determining if a specific value exists within a collection. This operator is especially useful when defining complex permission rules that involve checking membership or existence within arrays or lists of values.

Syntax:

model {
  @permission(
  expressions: value in collection
  )
}

Parameters:

  • value: The specific value or entity you're checking for.
  • collection: The collection (e.g., list of entities or values) you are searching within.

In Keel, the in operator is commonly used in permission expressions to verify if a certain entity or value is part of a collection. This is particularly handy when you want to check relationships or memberships in models.

Example:

Imagine you have a model representing teams and another model representing users. Each team has a list of user identities associated with it. If you want to check if a specific user's identity is part of a team, you can use the in operator:

@permission(
    actions: [get, list],
    expression: ctx.identity in team.users.identities
)

In this context, the permission will be granted if the current user's identity (ctx.identity) is found within the list of user identities associated with the team (team.users.identities).

💡

Please note that the in operator doesn't filter through permissions. When used in a permission, they just return a permission error if the response data contains anything the user can’t access