defmodule SecureX.Permissions do
alias SecureXWeb.{PermissionController}
@moduledoc """
Contains CRUD For Permissions.
"""
@doc """
Get list of Permissions by User Roles.
List/1 is without pagination,
List/2 & List/3 is with pagination.
## Examples
iex> list([], 1)
{:error, :bad_input}
iex> list([])
{:error, :bad_input}
iex> list(["owner", "super_admin"], 1)
{:ok,
%Scrivener.Page{
entries: [
%{permission: 4, resource_id: "roles", role_id: "owner"},
%{permission: 4, resource_id: "users", role_id: "owner"},
%{permission: 4, resource_id: "stock_types", role_id: "owner"},
%{permission: 4, resource_id: "sales", role_id: "owner"},
%{permission: 4, resource_id: "stocks", role_id: "owner"},
%{permission: 4, resource_id: "providers", role_id: "owner"},
%{permission: 4, resource_id: "fuel_dispensers", role_id: "owner"},
%{permission: 4, resource_id: "employees", role_id: "owner"},
%{permission: 4, resource_id: "customers", role_id: "owner"},
%{permission: 4, resource_id: "stock_stats", role_id: "owner"}
],
page_number: 1,
page_size: 10,
total_entries: 22,
total_pages: 3
}
}
iex> list(["owner", "super_admin"])
[
%{ permission: 4, resource_id: "users", role_id: "admin"},
%{ permission: 4, resource_id: "person_form", role_id: "super_admin"}
]
"""
@spec list(list(), number(), number()) :: tuple()
def list(list, page \\ nil, page_size \\ 10),
do: PermissionController.list_permissions(list, page, page_size)
@doc """
Add a Permission. You can send either `Atom Map` or `String Map` to add a Permission.
## Examples
iex> add(%{"permission" => -1, "resource_id" => "users", "role_id" => "super_admin"})
%Permission{
id: 1,
permission: -1,
resource_id: "users",
role_id: "super_admin"
}
"""
@spec add(map()) :: tuple()
def add(params) do
case PermissionController.create(params) do
{:error, error} -> {:error, error}
{:ok, role} -> {:ok, role}
end
end
@doc """
Update a Permission. You can send either `Atom Map` or `String Map` to 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()) :: tuple()
def update(params) do
case PermissionController.update(params) do
{:error, error} -> {:error, error}
{:ok, role} -> {:ok, role}
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()) :: tuple()
def delete(params) do
case PermissionController.delete(params) do
{:error, error} -> {:error, error}
{:ok, role} -> {:ok, role}
end
end
end