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_me
是 blocked_users.initiator_id → author_profile.id
been_blocked_by
是 blocked_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 并且该用户的 id
在 blocked_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
被阻止我们的作者。
我有这些表格:
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_me
是 blocked_users.initiator_id → author_profile.id
been_blocked_by
是 blocked_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 并且该用户的 id
在 blocked_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
被阻止我们的作者。