Current section

Files

Jump to
blossom lib blossom models organizations.ex
Raw

lib/blossom/models/organizations.ex

defmodule Blossom.Models.Organizations do
alias Blossom.Models.Organizations
alias Blossom.Utils
alias KilnCore.Builders.Model, as: Builder
alias KilnCore.Utils, as: KilnCoreUtils
def get(params, user, schema, org_roles) do
if user == :system do
schema.get(params)
else
memberships = org_roles.memberships(user)
params
|> Map.put("id", Utils.filter_allowed(params["id"], memberships))
|> schema.get()
end
end
def get_count(params, user, schema, org_roles) do
if user == :system do
schema.get_count(params)
else
memberships = org_roles.memberships(user)
params
|> Map.put("id", Utils.filter_allowed(params["id"], memberships))
|> schema.get_count()
end
end
def show(id, user, schema, org_roles) do
if user == :system do
schema.show([id])
else
if org_roles.is_member?(id, user) do
schema.show([id])
else
{:error, :forbidden}
end
end
end
def delete(id, user, schema, org_roles) do
if user == :system do
schema.delete(id)
else
if org_roles.is_admin?(id, user) do
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, ["enabled", "root"]),
schema: unquote(Keyword.get(opts, :schema))
@org_roles KilnCoreUtils.option_or_mod_replace(
@caller,
unquote(opts),
:organizations_roles,
OrganizationsRoles,
2
)
def get(params, user) do
Organizations.get(params, user, @schema, @org_roles)
end
def get_count(params, user) do
Organizations.get_count(params, user, @schema, @org_roles)
end
def show(id, user) do
Organizations.show(id, user, @schema, @org_roles)
end
def edit(params, id, user) do
if @org_roles.is_admin?(id, user) do
params
|> Builder.handle_params(@protected_fields, user)
|> Map.delete("id")
|> @schema.edit(id)
else
{:error, :forbidden}
end
end
def delete(id, user) do
Organizations.delete(id, user, @schema, @org_roles)
end
end
end
end