【问题标题】:How to create a friends relationship in Hasura如何在 Hasura 中建立朋友关系
【发布时间】:2020-11-27 04:42:19
【问题描述】:

我有 2 张桌子:usersfriends

friends 有一个 user_id 外键,它显然映射到 users id 键。 friends 也有一个 friend_id 键,它也映射到 users id 键。

我正在使用 JWT 身份验证。我已经成功设置了users 表的权限,这样当用户查询用户时,用户只提取该特定用户的列。我还在users 表上为朋友创建了一个数组关系,因此user 行可以通过关系拥有friends

但是,当查询类似:

{
  user {
    username
    friends {
      id
      username
    }
  }
}

这将为朋友返回 null,因为用户角色无权访问朋友(由于会话变量 X-Hasura-User-Id 用于按会话确定用户。我如何协调让会话变量工作但也能够查询其他朋友?

【问题讨论】:

    标签: hasura


    【解决方案1】:

    将此权限放在friends,然后用户可以看到friend_id 是他们的user.id 的所有朋友行:

    {
      "friend_id" :{
        "_eq" : "X-Hasura-User-Id"
       }
    }
    

    关系的权限继承自关系表。所以你只需要确保用户可以自己定期访问相关的表行,如果你能做到,它也将应用于关系。


    不相关,看起来这些表具有相同的列。如果它们相同,您可能希望使用来自users->users 的自引用关系作为friends。如果不忽略这个=)


    编辑:

    尝试使用_exists 权限:

    (您可以使用直接访问friendsuser 的关系来简化此操作,但我不知道您的确切表和关系结构)

    "如果表friends中存在,则'friend_id'为'X-Hasura-User-Id'且'user_id'等于该行的用户ID的行"

    {
      "_or": [
        {
          "_exists": {
            "_table": { "schema": "public", "name": "friends" },
            "_where": {
              "_and": [
                { "friend_id": { "_eq": "X-Hasura-User-Id" } },
                { "user_id": { "_ceq": "user_id" } }
              ]
            }
          }
        },
        { "id": { "_eq": "X-Hasura-User-Id" } }
      ]
    }
    

    【讨论】:

    • 嗨,加文,感谢您的回答。当我尝试这个时,我仍然有同样的问题。我仍然将用户表选择限制为会话中的用户。当我尝试加入用户表的查询时,由于没有权限,它返回 null。我希望这是有道理的。可以在不检查我的朋友表的情况下给予完全许可,但仍然无法正常工作。
    • 啊。您还应该尝试在“用户”上添加第二个“现有”权限。 "如果表friends中存在'friend_id'为'X-Hasura-User-Id'且'user_id'等于该行的用户ID的行" { "_or": [ { "_exists" : { "_table": { "schema": "public", "name": "friends" }, "_where": { "_and": [ { "friend_id": { "_eq": "X-Hasura-User -Id" } }, { "user_id": { "_ceq": "user_id" } } ] } } }, { "id": { "_eq": "X-Hasura-User-Id" } ] }
    • 如果我这样做了,我将失去会话功能,当我查询用户时,它只返回那个用户的数据,对吧?
    • 哦,人们通常只是在前端解码 JWT 并以 id 作为参数进行查询以获取用户信息。
    • Hasura 为您解码 JWT。因此,该权限将自动从 JWT 插入当前用户的 ID。因此,每个用户都可以根据当前用户的 ID 看到他们自己或与他们成为朋友的任何用户。
    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多