Packages
step_flow
0.0.18
1.9.0-rc2
1.9.0-rc1
1.9.0-rc0
1.8.2
1.8.1
1.8.1-rc8
1.8.1-rc7
1.8.1-rc6
1.8.1-rc5
1.8.1-rc4
1.8.1-rc3
1.8.1-rc2
1.8.1-rc1
1.8.1-rc0
1.8.0
1.8.0-rc3
1.8.0-rc2
1.8.0-rc1
1.8.0-rc0
1.7.3
1.7.3-rc4
1.7.3-rc3
1.7.3-rc2
1.7.3-rc1
1.7.3-rc0
1.7.2
1.7.2-rc4
1.7.2-rc3
1.7.2-rc2
1.7.2-rc1
1.7.2-rc0
1.7.1
1.7.0
1.7.0-rc1
1.7.0-rc0
1.6.1
1.6.1-rc1
1.6.1-rc0
1.6.0
1.6.0-rc9
1.6.0-rc8
1.6.0-rc7
1.6.0-rc6
1.6.0-rc5
1.6.0-rc4
1.6.0-rc3
1.6.0-rc20
1.6.0-rc2
1.6.0-rc19
1.6.0-rc18
1.6.0-rc17
1.6.0-rc16
1.6.0-rc15
1.6.0-rc14
1.6.0-rc13
1.6.0-rc12
1.6.0-rc11
1.6.0-rc10
1.6.0-rc1
1.5.0
1.5.0-rc1
1.4.2-rc2
1.4.2-rc1
1.4.1
1.4.1-rc1
1.4.0
1.4.0-rc4
1.4.0-rc3
1.4.0-rc2
1.4.0-rc1
1.3.1
1.3.0
1.3.0-rc
1.2.0
1.1.0
1.0.0
1.0.0-rc9
1.0.0-rc8
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc1
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.4
0.0.3
0.0.2
0.0.1
Step flow manager for Elixir applications
Current section
Files
Jump to
Current section
Files
lib/step_flow/authorization.ex
defmodule StepFlow.Authorization do
@moduledoc """
StepFlow provide an entire system to manage workflows.
It provides differents parts:
- Connection with a database using Ecto to store Workflow status
- a connection with a message broker to interact with workers
- a RESTful API to create, list and interact with workflows
"""
use Plug.Builder
plug(Plug.Logger)
require Logger
@doc """
Check authorization for the connection using the method and the path.
It can be configured using:
```elixir
config :step_flow,
authorize: [
module: ExBackendWeb.Authorize,
get_jobs: [:user_check, :specific_right_check]
]
```
"""
def check(conn) do
key = String.to_atom(String.downcase(conn.method) <> "_" <> get_path(conn.path_info))
authorize = Application.get_env(:step_flow, :authorize)
if authorize &&
Keyword.has_key?(authorize, :module) &&
Keyword.has_key?(authorize, key) do
check_for_route(conn, Keyword.get(authorize, :module), Keyword.get(authorize, key))
else
conn
end
end
defp check_for_route(conn, _module, []), do: conn
defp check_for_route(conn, module, [check | checks]) do
Logger.info("#{__MODULE__}: Check authorization with #{module}.#{check}")
conn = Kernel.apply(module, check, [conn, %{}])
if conn.halted do
conn
else
check_for_route(conn, module, checks)
end
end
defp get_path(["workflows", _, "events"]) do
"workflows_events"
end
defp get_path(items) do
List.first(items)
end
end