mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 05:23:18 +12:00
Update test to demo issue with policy on aggregate
The issue occurs when an aggregate is loaded, and the aggregated resource itself has a relates_to_actor_via policy. The following error is produced at test/aggregate_test.exs:42 1) test relates to actor via has_many and with an aggregate (AshPostgres.AggregateTest) test/aggregate_test.exs:8 ** (RuntimeError) Could not determined related for `exists/2` expression. Context Resource: %{aggregates: %{count_of_comments: #count<comments from #Ash.Query<resource: AshPostgres.Test.Comment>>}, calculations: %{}, data_layer: AshPostgres.DataLayer, public?: false, relationship_path: [], resource: AshPostgres.Test.Post, root_resource: AshPostgres.Test.Post} Context Relationship Path: [] At Path: [] Path: [:post, :organization, :users] Related: nil Expression: exists(post.organization.users, [id: "236f08bc-6a3a-4a78-9911-2c24189dafac"]) code: |> Api.read_one!() stacktrace: (ash 2.5.12) lib/ash/filter/filter.ex:2121: Ash.Filter.add_expression_part/3 (ash 2.5.12) lib/ash/filter/filter.ex:2037: anonymous fn/3 in Ash.Filter.parse_expression/2 (elixir 1.14.2) lib/enum.ex:4751: Enumerable.List.reduce/3 (elixir 1.14.2) lib/enum.ex:2514: Enum.reduce_while/3 (ash 2.5.12) lib/ash/filter/filter.ex:295: Ash.Filter.parse/5 (ash 2.5.12) lib/ash/filter/filter.ex:995: Ash.Filter.add_to_filter/6 (ash 2.5.12) lib/ash/query/query.ex:1797: Ash.Query.do_filter/2 (elixir 1.14.2) lib/map.ex:883: Map.update!/3 (ash 2.5.12) lib/ash/engine/request.ex:650: Ash.Engine.Request.apply_filter/4 (ash 2.5.12) lib/ash/engine/request.ex:557: Ash.Engine.Request.do_strict_check/3 (ash 2.5.12) lib/ash/engine/request.ex:518: anonymous fn/2 in Ash.Engine.Request.strict_check/2 (elixir 1.14.2) lib/enum.ex:4751: Enumerable.List.reduce/3 (elixir 1.14.2) lib/enum.ex:2514: Enum.reduce_while/3 (ash 2.5.12) lib/ash/engine/request.ex:255: Ash.Engine.Request.do_next/1 (ash 2.5.12) lib/ash/engine/request.ex:211: Ash.Engine.Request.next/1 (ash 2.5.12) lib/ash/engine/engine.ex:650: Ash.Engine.advance_request/2 (ash 2.5.12) lib/ash/engine/engine.ex:556: Ash.Engine.fully_advance_request/2 (ash 2.5.12) lib/ash/engine/engine.ex:497: Ash.Engine.do_run_iteration/2 (elixir 1.14.2) lib/enum.ex:2468: Enum."-reduce/3-lists^foldl/2-0-"/3 (ash 2.5.12) lib/ash/engine/engine.ex:257: Ash.Engine.run_to_completion/1 (ash 2.5.12) lib/ash/engine/engine.ex:202: Ash.Engine.do_run/2 (ash 2.5.12) lib/ash/engine/engine.ex:141: Ash.Engine.run/2 (ash 2.5.12) lib/ash/actions/read.ex:170: Ash.Actions.Read.do_run/3 (ash 2.5.12) lib/ash/actions/read.ex:90: Ash.Actions.Read.run/3 (ash 2.5.12) lib/ash/api/api.ex:1005: Ash.Api.read_one/3 (ash 2.5.12) lib/ash/api/api.ex:998: Ash.Api.read_one!/3 test/aggregate_test.exs:43: (test)
This commit is contained in:
parent
42ec9cf46a
commit
1dbd7f619d
2 changed files with 11 additions and 4 deletions
|
@ -32,8 +32,6 @@ defmodule AshPostgres.AggregateTest do
|
|||
|> Ash.Query.filter(id == ^post.id)
|
||||
|> Api.read_one!(actor: user)
|
||||
|
||||
# The policy works fine in this case and we can read the post,
|
||||
# since the post and the actor are in the same org
|
||||
assert read_post.id == post.id
|
||||
|
||||
read_post =
|
||||
|
@ -42,7 +40,6 @@ defmodule AshPostgres.AggregateTest do
|
|||
|> Ash.Query.load(:count_of_comments)
|
||||
|> Api.read_one!(actor: user)
|
||||
|
||||
# Loading the :count_of_comments aggregate produces the error
|
||||
assert read_post.count_of_comments == 1
|
||||
end
|
||||
|
||||
|
|
|
@ -1,7 +1,17 @@
|
|||
defmodule AshPostgres.Test.Comment do
|
||||
@moduledoc false
|
||||
use Ash.Resource,
|
||||
data_layer: AshPostgres.DataLayer
|
||||
data_layer: AshPostgres.DataLayer,
|
||||
authorizers: [
|
||||
Ash.Policy.Authorizer
|
||||
]
|
||||
|
||||
policies do
|
||||
bypass action_type(:read) do
|
||||
# Check that the comment is in the same org (via post) as actor
|
||||
authorize_if(relates_to_actor_via([:post, :organization, :users]))
|
||||
end
|
||||
end
|
||||
|
||||
postgres do
|
||||
table "comments"
|
||||
|
|
Loading…
Reference in a new issue