Current section
Files
Jump to
Current section
Files
lib/middleware/authorization.ex
defmodule Speakeasy.Middleware.Authorization do
@moduledoc """
Authorization middleware for Absinthe schemas or fields.
Please see the [README](readme.html) for usage.
"""
@behaviour Absinthe.Middleware
def call(resolution, _config) do
schema = resolution.schema
identifier = resolution.definition.schema_node.identifier
context = resolution.context
args = resolution.arguments
result = Bodyguard.permit(schema, identifier, context, args)
case resolve_result(result) do
:ok -> resolution
{:error, reason} -> Absinthe.Resolution.put_result(resolution, {:error, reason})
end
end
defp resolve_result(true), do: :ok
defp resolve_result(:ok), do: :ok
defp resolve_result(false), do: {:error, :unauthorized}
defp resolve_result(:error), do: {:error, :unauthorized}
defp resolve_result({:error, reason}), do: {:error, reason}
end