defmodule Rivet.Ident.Access do @moduledoc """ Schema for representing and working with a Ident.Access. """ use TypedEctoSchema use Rivet.Ecto.Model, id_type: :int alias Rivet.Ident typed_schema "ident_accesses" do belongs_to(:user, Ident.User, type: :binary_id, foreign_key: :user_id) belongs_to(:role, Ident.Role, foreign_key: :role_id) # Access domains are per table type so you can map accesses to individual # rows in a table (such as different accesses for different groups in the db), # where :global is ... global and not tied to another data type, and for others # they enum key should be the module atom: :"Elixir.Module.Name" field(:domain, Rivet.Utils.Ecto.Atom, default: :global) field(:ref_id, :binary_id) end use Rivet.Ecto.Collection, required: [:user_id, :role_id], update: [:domain, :ref_id], unique: [:role_id] end