Ash.Can (ash v3.30.1)

Copy Markdown View Source

Contains the Ash.can function logic.

Summary

Functions

Returns a an ok tuple if the actor can perform the action, query, or changeset, an error tuple if an error happens, and a ok tuple with maybe if maybe is set to true or not set.

Returns whether an actor can perform an action, query, or changeset.

Returns whether an actor can perform each of the given actions.

Returns whether an actor can perform all of the given actions.

Types

check_entry()

@type check_entry() :: subject() | {subject(), Keyword.t()}

checks()

@type checks() :: [check_entry()] | [{atom(), check_entry()}]

subject()

Functions

can(action_or_query_or_changeset, domain, actor_or_scope, opts \\ [])

@spec can(subject(), Ash.Domain.t(), Ash.actor() | Ash.Scope.t(), Keyword.t()) ::
  {:ok, boolean() | :maybe}
  | {:ok, boolean(), term()}
  | {:ok, boolean(), Ash.Changeset.t(), Ash.Query.t()}
  | {:error, Ash.Error.t()}

Returns a an ok tuple if the actor can perform the action, query, or changeset, an error tuple if an error happens, and a ok tuple with maybe if maybe is set to true or not set.

You should prefer to use Ash.can/3 over this module, directly.

Note: maybe_is is set to :maybe, if not set.

can?(action_or_query_or_changeset, domain, actor, opts \\ [])

Returns whether an actor can perform an action, query, or changeset.

You should prefer to use Ash.can?/3 over this module, directly.

Can raise an exception if return_forbidden_error is truthy in opts or there's an error.

can_do_all(checks, actor_or_scope, opts \\ [])

@spec can_do_all(checks(), Ash.actor() | Ash.Scope.t(), Keyword.t()) ::
  {:ok, [boolean() | :maybe] | map()} | {:error, Ash.Error.t()}

Returns whether an actor can perform each of the given actions.

You should prefer to use Ash.can_do_all/3 over this module, directly.

Returns {:ok, results} where results is a list (when checks is a list) or a map (when checks is a keyword list). Each value is true, false, or :maybe.

Each entry in checks is the same shape accepted by can/3, or {subject, opts} to provide per-check options. Per-check options are merged on top of the shared options, so values like tenant and context only need to be provided once.

can_do_all?(checks, actor_or_scope, opts \\ [])

@spec can_do_all?(checks(), Ash.actor() | Ash.Scope.t(), Keyword.t()) ::
  boolean() | no_return()

Returns whether an actor can perform all of the given actions.

You should prefer to use Ash.can_do_all?/3 over this module, directly.

Each entry in checks is the same shape accepted by can?/3, or {subject, opts} to provide per-check options. Per-check options are merged on top of the shared options, so values like tenant and context only need to be provided once.

When checks is a keyword list, use Ash.can_do_all/3 to get a map of results keyed by the provided names.

Can raise an exception if return_forbidden_error? is truthy in opts or there's an error.