defmodule Blossom.Models.OtpCodes do alias Blossom.Models.OtpCodes alias Blossom.Utils alias KilnCore.Builders.Model, as: Builder def expand_perms(action) do Utils.expand_perms("realms", "otp-codes", action) end def make_new(params, user, ctx) do params |> Builder.handle_params(ctx[:protected_fields], user) |> ctx[:schema].new() end def new(params, user, ctx) do case user do :system -> ctx[:schema].new(params) %{"sub" => _} -> perms = OtpCodes.expand_perms("create") case Utils.check_create_item(user, perms, :any, user["sub"], ctx) do {:ok, _} -> OtpCodes.make_new(params, user, ctx) e -> e end _ -> {:error, :forbidden} end end def delete(id, user, ctx) do case user do :system -> ctx[:schema].delete(id) %{"sub" => _} -> perms = OtpCodes.expand_perms("delete") if Utils.has_item_perms?(id, user, perms, ctx) do ctx[:schema].delete(id) else {:error, :forbidden} end _ -> {:error, :forbidden} end end defmacro __using__(opts \\ []) do quote do use KilnCore.Model, schema: unquote(Keyword.get(opts, :schema)) @ctx [schema: @schema, protected_fields: @protected_fields] def new(params, user) do OtpCodes.new(params, user, @ctx) end def delete(id, user) do OtpCodes.delete(id, user, @ctx) end end end end