Packages
step_flow
1.8.1-rc7
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/web_controllers/role.ex
defmodule StepFlow.WebController.Role do
use StepFlow, :controller
use OpenApiSpex.ControllerSpecs
alias StepFlow.Roles
alias StepFlow.WebController.Helpers
alias StepFlow.WebController.OpenApiSchemas
@moduledoc false
tags ["Roles"]
security [%{"authorization" => %OpenApiSpex.SecurityScheme{type: "http", scheme: "bearer"}}]
action_fallback(ExBackendWeb.WebController.Fallback)
defp forbidden(conn) do
conn
|> put_status(:forbidden)
|> json(%{status: "error", message: "Forbidden access to roles"})
end
operation :index,
summary: "List roles",
description: "List roles",
type: :object,
responses: [
ok: {"Roles", "application/json", OpenApiSchemas.Roles.Roles},
forbidden: "Forbidden"
]
def index(%Plug.Conn{assigns: %{current_user: user}} = conn, params) do
if Helpers.has_right?("roles::*", user, "view") do
roles = Roles.list_roles(params)
conn
|> put_view(StepFlow.RoleView)
|> render("index.json", roles: roles)
else
conn
|> forbidden()
end
end
def index(conn, _) do
conn
|> forbidden()
end
defp show_per_id(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"id" => id}) do
role = Roles.get_role(id)
if role != nil && Helpers.has_right?("roles::" <> role.name, user, "view") do
conn
|> put_view(StepFlow.RoleView)
|> render("show.json", role: role)
else
conn
|> forbidden()
end
end
defp show_per_name(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"id" => name}) do
if Helpers.has_right?("roles::" <> name, user, "view") do
role = Roles.get_by(%{"name" => name})
conn
|> put_view(StepFlow.RoleView)
|> render("show.json", role: role)
else
conn
|> forbidden()
end
end
operation :show,
summary: "Show role",
description: "Show role by id or by name",
type: :object,
parameters: [
id: [
in: :path,
description: "Role ID or name (string)",
type: :integer,
example: 1
]
],
responses: [
ok: {"Role", "application/json", OpenApiSchemas.Roles.Role},
forbidden: "Forbidden",
not_found: "Not Found"
]
def show(%Plug.Conn{assigns: %{current_user: _user}} = conn, %{"id" => identifier}) do
case Integer.parse(identifier) do
{id, ""} -> show_per_id(conn, %{"id" => id})
_ -> show_per_name(conn, %{"id" => identifier})
end
end
def show(conn, _) do
conn
|> forbidden()
end
operation :create, false
def create(%Plug.Conn{assigns: %{current_user: user}} = conn, param) do
if Helpers.has_right?("roles::*", user, "create") do
{:ok, role} = Roles.create_role(param)
conn
|> put_view(StepFlow.RoleView)
|> render("show.json", role: role)
else
conn
|> forbidden()
end
end
def create(conn, _) do
conn
|> forbidden()
end
operation :update, false
def update(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"id" => id} = param) do
role =
case Integer.parse(id) do
{id, ""} -> Roles.get_role(id)
_ -> nil
end
if role != nil && Helpers.has_right?("roles::" <> role.name, user, "update") do
{:ok, role} =
role
|> Roles.update_role(param)
conn
|> put_view(StepFlow.RoleView)
|> render("show.json", role: role)
else
conn
|> forbidden()
end
end
def update(conn, _) do
conn
|> forbidden()
end
operation :delete,
summary: "Delete role",
description: "Delete role by id or by name",
type: :object,
parameters: [
id: [
in: :path,
description: "Role ID or name (string)",
type: :integer,
example: 1
]
],
responses: [
no_content: "No Content",
forbidden: "Forbidden",
not_found: "Not Found"
]
def delete(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"id" => id}) do
role =
case Integer.parse(id) do
{id, ""} -> Roles.get_role(id)
_ -> nil
end
if role != nil && Helpers.has_right?("roles::" <> role.name, user, "delete") do
{:ok, role} =
role
|> Roles.delete_role()
conn
|> put_view(StepFlow.RoleView)
|> render("show.json", role: role)
else
conn
|> forbidden()
end
end
def delete(conn, _) do
conn
|> forbidden()
end
end