Packages

Custom Elixir authorization library

Retired package: Release invalid - Useless & Incomplete

Current section

Files

Jump to
microservices_authorization lib microservices_authorization.ex
Raw

lib/microservices_authorization.ex

defmodule MicroservicesAuthorization do
@moduledoc """
Documentation for MicroservicesAuthorization.
"""
defp get_json(filename) do
with {:ok, body} <- File.read(filename), {:ok, json} <- Poison.decode(body), do: {:ok, json}
end
defp get_config_file do
Mix.Project.get().project[:app]
|> :code.priv_dir()
|> Path.join(Application.get_env(:microservices_authorization, :config, ""))
end
def get_config do
get_json(get_config_file())
end
def get_config_permissions do
case get_config do
{:ok, %{"permissions" => permissions}} ->
permissions
_ ->
[]
end
end
def get_operation_permissions(operation) do
Enum.reduce(get_config_permissions(), %{}, fn x, acc ->
if operation == x["operation"] do
Map.merge(x["roles"], acc)
else
acc
end
end)
end
def authorize(roles, operation) do
operation_permissions = get_operation_permissions(operation)
Enum.reduce(roles, false, fn role, acc ->
case operation_permissions[role] do
nil ->
false
result ->
result
end
end)
end
end