asifurarahman

asifurarahman

I want to set some values using Plug in ash context and want to use it on GraphQL queries.

  1. router.ex
defmodule BekrafterBackendWeb.Router do
  use BekrafterBackendWeb, :router

  pipeline :graphql do
    plug BekrafterBackend.Plug
    plug AshGraphql.Plug
  end

  scope "/" do
    pipe_through [:graphql]

    forward "/gql",
      Absinthe.Plug,
      schema: Module.concat(["BekrafterBackend.Graphql.Schema"])

    forward "/playground",
            Absinthe.Plug.GraphiQL,
            schema: Module.concat(["BekrafterBackend.Graphql.Schema"]),
            interface: :playground
  end
end

  1. Plug.ex
defmodule BekrafterBackend.Plug do
  @behaviour Plug

  def init(opts), do: opts

  def call(conn, _opts) do
    conn
    |> AshAuthentication.Plug.Helpers.retrieve_from_bearer(:bekrafterbackend)
    |> AshAuthentication.Plug.Helpers.set_actor(:user)
    |> Ash.PlugHelpers.set_context(%{test: "test"})
  end
end

  1. hello.ex
defmodule BekrafterBackend.Introduction.Hello do
  use Ash.Resource,
  domain: BekrafterBackend.Introduction,
  data_layer: Ash.DataLayer.Ets,
  extensions: [
    AshGraphql.Resource
  ],
  authorizers: [
    Ash.Policy.Authorizer
  ]

  @all_attributes [:id, :message]

  attributes do
    uuid_primary_key :id
    attribute :message, :string, allow_nil?: false, public?: true
  end

  actions do
    defaults [:read]

    create :create do
      accept @all_attributes
    end

    update :update do
      accept @all_attributes
    end

    destroy :destroy do
      accept [:id]
    end

    action :say_hello, :string do
      run fn _input, context ->
        {:ok, "Hello, #{context.test}!"}
      end
    end
  end

  code_interface do
    define :say_hello, args: []
  end

  graphql do
    type :introduction

    queries do
      get :get_message, :read
      list :list_message, :read
      action :say_hello, :say_hello
    end

    mutations do
      create :create_message, :create
      update :update_message, :update
      destroy :delete_message, :destroy
    end
  end

  policies do
    policy action(:say_hello) do
      authorize_if actor_present()
    end
  end
end

I am unable to access the test key from the say_hello action set in the context. Could you please help me with this?

Showing Posts 1 to 3

zachdaniel

zachdaniel

Creator of Ash

It is unfortunately confusing, but there are two contexts. There is the context argument provided to function callbacks like that. It contains a specific and unchanging set of keys like actor and tenant, and then there is the action context which can contain arbitrary information.

     run fn input, context ->
        {:ok, "Hello, #{input.context.test}!"}
      end
asifurarahman

asifurarahman OP

Thank you so much. It has solved the issue. But, it seems confusing at first which one holds which information :sweat_smile:

zachdaniel

zachdaniel

Creator of Ash

Yes, agreed. In future versions we may update the documentation to provide a different standard name for that variable, or something along those lines.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews