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