analytics / lib /plausible_web /plugs /authorize_team_access.ex
Leon4gr45's picture
Upload folder using huggingface_hub (part 3)
88211d3 verified
Raw
History Blame Contribute Delete
981 Bytes
defmodule Plausible.Plugs.AuthorizeTeamAccess do
@moduledoc """
Enforce team role to be within the declared set.
`:current_team_role` is assumed to be populated by `PlausibleWeb.AuthPlug`.
For cases where no `:current_team` exists, the plug is permissive,
so that existing notices can be displayed still.
"""
alias PlausibleWeb.Router.Helpers, as: Routes
import Plug.Conn
@all_roles Plausible.Teams.Membership.roles() -- [:guest]
def init([]), do: @all_roles
def init(roles) when is_list(roles) do
true = Enum.all?(roles, &(&1 in @all_roles))
roles
end
def call(conn, roles \\ @all_roles) do
current_team = conn.assigns[:current_team]
if current_team do
current_team_role = conn.assigns[:current_team_role]
if current_team_role in roles do
conn
else
conn
|> Phoenix.Controller.redirect(to: Routes.site_path(conn, :index))
|> halt()
end
else
conn
end
end
end