ash_postgres/test/support/multitenancy/resources/post.ex

65 lines
1.5 KiB
Elixir
Raw Normal View History

2020-10-29 15:26:45 +13:00
defmodule AshPostgres.MultitenancyTest.Post do
@moduledoc false
use Ash.Resource,
domain: AshPostgres.MultitenancyTest.Domain,
data_layer: AshPostgres.DataLayer,
authorizers: [Ash.Policy.Authorizer]
policies do
policy always() do
authorize_if(always())
end
policy action(:update_with_policy) do
# this is silly, but we want to force it to make a query
authorize_if(expr(exists(self, true)))
end
end
2020-10-29 15:26:45 +13:00
attributes do
2021-01-13 14:27:39 +13:00
uuid_primary_key(:id, writable?: true)
attribute(:name, :string, public?: true)
2020-10-29 15:26:45 +13:00
end
actions do
default_accept(:*)
2022-04-20 03:08:28 +12:00
defaults([:create, :read, :update, :destroy])
update(:update_with_policy)
2020-10-29 15:26:45 +13:00
end
postgres do
table "multitenant_posts"
repo AshPostgres.TestRepo
end
multitenancy do
# Tells the resource to use the data layer
# multitenancy, in this case separate postgres schemas
2021-01-13 14:22:28 +13:00
strategy(:context)
2020-10-29 15:26:45 +13:00
end
relationships do
belongs_to(:org, AshPostgres.MultitenancyTest.Org) do
public?(true)
end
belongs_to(:user, AshPostgres.MultitenancyTest.User) do
public?(true)
end
has_one(:self, __MODULE__, destination_attribute: :id, source_attribute: :id, public?: true)
many_to_many :linked_posts, __MODULE__ do
through(AshPostgres.MultitenancyTest.PostLink)
source_attribute_on_join_resource(:source_id)
destination_attribute_on_join_resource(:dest_id)
end
2020-10-29 15:26:45 +13:00
end
calculations do
calculate(:last_word, :string, expr(fragment("split_part(?, ' ', -1)", name)))
end
2020-10-29 15:26:45 +13:00
end