defmodule MicroservicesAuthorization.Plugs.PermissionCheck do import Plug.Conn def init(opts), do: opts def authorized?( %Plug.Conn{ assigns: %{current_user: %{"roles" => roles}}, private: %{:phoenix_action => action} } = conn ) do # Implement authentication logic here, e.g. check auth headers, # session creds, etc. MicroservicesAuthorization.authorize(roles, Atom.to_string(action)) end def authorized?(_), do: false def call(conn, opts) do # IO.inspect(conn) # conn # |> Plug.Conn.read_body() # |> IO.inspect() if authorized?(conn) do conn else conn |> put_resp_content_type("application/json") |> send_resp(401, '{"message": "Unauthorized request. Check roles." ,"status": "failed"}') |> halt end end end