Hasura 根据用户阻止状态获取数据的权限

Hasura permissions to fetch data depending on users block status

我有这些表格:

Table blocked_users
id (pk)  | initiator_id (fk) | target_id (fk)
1        | a                 | b 


Table post
id (pk)  | author_profile (fk)
1        | a               
2        | b
3        | c
4        | d

我正在尝试获得适当的 select 权限,我尝试了很多组合,但无法获得所需的结果 -> 获取 post s 并排除我屏蔽或他们屏蔽我的用户。

这是我尝试过的众多权限之一:

blocked_by_meblocked_users.initiator_id → author_profile.id

been_blocked_byblocked_users.target_id → author_profile.id

{
  "_and": [
    { "deleted_at": { "_is_null": true } },
    { "author_profile": { "deleted_at": { "_is_null": true } } },
    {
      "_and": [
        {
          "author_profile": {
            "been_blocked_by": {
              "initiator_id": {
                "_eq": "X-Hasura-User-Id"
              }
            }
          }
        },
        {
          "author_profile": {
            "blocked_by_me": {
              "initiator_id": {
                "_eq": "X-Hasura-User-Id"
              }
            }
          }
        }
      ]
    }
  ]
}

以及我尝试过的众多查询之一:(在 post 上没有权限)

query GetPosts(
  $created_at: order_by = desc
  $limit: Int! = 12
  $offset: Int! = 0
) {
  post(
    limit: $limit
    offset: $offset
    order_by: { created_at: $created_at }
    where: {
      _not: {
        author_profile: {
          _or: [
            {
              been_blocked_by: { initiator_id: { _eq: "a" } }
              blocked_by_me: { target_id: { _neq: "b" } }
            }
          ]
        }
      }
      _and: {
        deleted_at: { _is_null: true }
        author_profile: { deleted_at: { _is_null: true } }
      }
    }
  ) {
    author_profile {
      id
      first_name
    }
  }
}


对于上面的查询,如果用户创建了 post 并且该用户的 idblocked_users 不存在 那么查询不会返回该用户的 post,换句话说,查询 returns 仅返回 post 在 [=18= 上至少有一条记录的用户的 post ](没有被我屏蔽或者那个用户没有屏蔽我)。

Get the posts and exclude the users that either I have blocked or they have blocked me.

你想要你的 select 权限 排除 来自 或者 阻止你的用户的 post 被你屏蔽了。使用与您拥有的相同的数组关系,我们可以为 post 编写一个权限,例如:

{
  "_not": {
    "_or": [
      {
        "author_profile": {
          "been_blocked_by": { "initiator_id": { "_eq": "X-Hasura-User-Id" } }
        }
      },
      {
        "author_profile": {
          "blocked_by_me": { "target_id": { "_eq": "X-Hasura-User-Id" } }
        }
      }
    ]
  }
}

我们基本上是在告诉 Hasura 只显示 post 的 _not 作者 been_blocked_by 我们 _or 被阻止我们的作者。