lib/ash/error/forbidden.ex

defmodule Ash.Error.Forbidden do
  @moduledoc "Used when authorization for an action fails"

  use Ash.Error.Exception

  def_ash_error([:errors, stacktraces?: true], class: :forbidden)

  defimpl Ash.ErrorKind do
    def id(_), do: Ash.UUID.generate()

    def message(%{errors: errors, stacktraces?: stacktraces?}) when not is_nil(errors) do
      Ash.Error.error_messages(errors, nil, stacktraces?)
    end

    def message(%{errors: errors}) do
      Ash.Error.error_descriptions(errors)
    end

    def code(_), do: "forbidden"
  end
end