Current section
Files
Jump to
Current section
Files
lib/securex_web/controllers/permission_controller.ex
defmodule SecureXWeb.PermissionController do
@moduledoc false
use SecureXWeb, :controller
alias SecureX.Common
alias SecureX.Context
@doc """
Get list of Permissions By Roles,
## Examples
iex> list_permissions(["owner", "super_admin"])
[
...
%{ permission: 4, resource_id: "users", role_id: "admin"},
...
%{ permission: 4, resource_id: "person_form", role_id: "super_admin"},
...
]
"""
@spec list_permissions(list()) :: nonempty_list()
def list_permissions(params) when params !== [] do
Context.list_permissions(params)
end
def list_permissions(_), do: {:error, :bad_input}
@doc """
Create a Permission,
## Examples
iex> create(%{"permission" => -1, "resource_id" => "users", "role_id" => "super_admin"})
%Permission{
id: 1,
permission: -1,
resource_id: "users",
role_id: "super_admin"
}
"""
@spec create(map()) :: struct()
def create(params) when params !== %{} do
case params do
%{resource_id: _, role_id: _} -> create_per_sage(params)
%{"resource_id" => _, "role_id" => _} ->
params = Common.keys_to_atoms(params)
create_per_sage(params)
_-> {:error, :bad_input}
end
end
def create(_), do: {:error, :bad_input}
defp create_per_sage(params) do
with nil <- Context.get_permission(params.resource_id, params.role_id),
{:ok, per} <- Context.create_permission(params) do
{:ok, per}
else
%{__struct__: _} -> {:error, :alrady_exist}
{:error, error} -> {:error, error}
end
end
@doc """
Update a Permission,
## Examples
iex> update(%{"id" => "1", "resource_id" => "users", "permission" => 4, "role_id" => "admin"})
%Permission{
id: 1,
permission: 4,
resource_id: "users",
role_id: "admin"
}
"""
@spec update(map()) :: struct()
def update(params) when params !== %{} do
case params do
%{id: per_id} -> update_per_sage(per_id, params)
%{"id" => per_id} ->
params = Common.keys_to_atoms(params)
update_per_sage(per_id, params)
_-> {:error, :bad_input}
end
end
def update(_), do: {:error, :bad_input}
defp update_per_sage(per_id, params) do
with %{__struct__: _} = per <- Context.get_permission(per_id),
{:ok, new_per} <- Context.update_permission(per, Map.delete(params, :id)) do
{:ok, new_per}
else
nil -> {:error, :alrady_exist}
{:error, error} -> {:error, error}
end
end
@doc """
Delete a Permission,
## Examples
iex> delete(%{"id" => 1)
%Permission{
id: 1,
permission: 4,
resource_id: "users",
role_id: "admin"
}
"""
@spec delete(map()) :: struct()
def delete(params) when params !== %{} do
case params do
%{id: per_id} -> delete_per_sage(per_id)
%{"id" => per_id} -> delete_per_sage(per_id)
_-> {:error, :bad_input}
end
end
def delete(_), do: {:error, :bad_input}
defp delete_per_sage(per_id) do
with %{__struct__: _} = per <- Context.get_permission(per_id),
{:ok, per} <- Context.delete_permission(per) do
{:ok, per}
else
nil -> {:error, :doesnt_exist}
{:error, error} -> {:error, error}
end
end
end