Current section

Files

Jump to
blossom lib blossom models settings.ex
Raw

lib/blossom/models/settings.ex

defmodule Blossom.Models.Settings do
alias Blossom.Models.Settings
alias Blossom.Utils
alias KilnCore.Builders.Model, as: Builder
alias KilnCore.Utils, as: KilnCoreUtils
def new(params, user, ctx, protected_fields) do
if user == :system do
ctx[:schema].new(params)
else
if ctx[:realms].is_admin?(user["sub"], params["realm"]) do
params
|> Builder.handle_params(protected_fields, user)
|> ctx[:schema].new()
else
{:error, :forbidden}
end
end
end
def get(params, user, ctx) do
if user == :system do
ctx[:schema].get(params)
else
if ctx[:realms].is_admin?(user["sub"], user["iss"]) do
params
|> Map.put("realm", user["iss"])
|> ctx[:schema].get()
else
[]
end
end
end
def get_count(params, user, ctx) do
if user == :system do
ctx[:schema].get_count(params)
else
if ctx[:realms].is_admin?(user["sub"], user["iss"]) do
params
|> Map.put("realm", user["iss"])
|> ctx[:schema].get_count()
else
0
end
end
end
def show(id, user, ctx) do
if user == :system do
ctx[:schema].show(id)
else
if Utils.item_realm_admin?(id, user, ctx) do
%{"id" => id, "limit" => 1, "realm" => user["iss"]}
|> ctx[:schema].get()
else
{:error, :forbidden}
end
end
end
def edit(params, id, user, ctx, protected_fields) do
if user == :system do
ctx[:schema].edit(params, id)
else
if Utils.item_realm_admin?(id, user, ctx) do
params
|> Builder.handle_params(protected_fields, user)
|> Map.drop(["id", "realm"])
|> ctx[:schema].edit(id)
else
{:error, :forbidden}
end
end
end
def delete(id, user, ctx) do
if user == :system do
ctx[:schema].delete(id)
else
if Utils.item_realm_admin?(id, user, ctx) do
ctx[:schema].delete(id)
else
{:error, :forbidden}
end
end
end
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Model,
protected_fields: Keyword.get(unquote(opts), :protected_fields, []),
schema: unquote(Keyword.get(opts, :schema))
@realms KilnCoreUtils.option_or_mod_replace(
@caller,
unquote(opts),
:realms,
Realms,
2
)
@ctx [
realms: @realms,
schema: @schema
]
def new(params, user) do
Settings.new(params, user, @ctx, @protected_fields)
end
def get(params, user) do
Settings.get(params, user, @ctx)
end
def get_count(params, user) do
Settings.get_count(params, user, @ctx)
end
def show(id, user) do
Settings.show(id, user, @ctx)
end
def edit(params, id, user) do
Settings.edit(params, id, user, @ctx, @protected_fields)
end
def delete(id, user) do
Settings.delete(id, user, @ctx)
end
end
end
end