graphql - 处理 Hasura 中的不同角色

标签 graphql roles hasura

好的,所以我的表格是这样的:

user {
  id
  username
}

job {
  id
  title
  posted_by
  applications
}

application {
  id
  applicant_id
  details
  status
}

地点:

  • 每个用户都可以发布职位
  • 用户只能编辑自己发布的职位 (posted_by)
  • 用户可以申请任何他未发布的职位
  • 用户可以删除自己的应用程序
  • 职位发布者可以接受(更改状态)对其自己发布的职位的申请

这意味着用户应该根据应用程序具有不同的角色。如果他发布了职位,那么他就是“职位发布者”,如果他发布了申请,那么他就是“申请人”。

我认为,如果我在应用程序表上定义这些角色,他将根据他尝试更新的应用程序动态分配,但它不起作用。阅读 Hasura 文档,我发现它基于登录时生成的 JWT token 中定义的 X-Hasura-Role,但用户可以拥有两个角色。

我还尝试为角色用户定义两行,每行将定义他可以更新的内容,但这也不起作用。

我已阅读 https://hasura.io/docs/latest/graphql/core/auth/authorization/index.html没有任何答案。我将继续阅读https://hasura.io/docs/latest/graphql/core/auth/authentication/jwt.html

感谢您的阅读, 柴姆

最佳答案

找到了解决方案。它与X-Hasura-Role相关。发出请求时,我们需要告诉服务器我们希望应用此操作的角色。如果该角色不在我们的 JWT 声明 x-hasura-allowed-roles 中,则该操作将默认为 x-hasura-default-role

所以我所做的是(apollo-client):

useMutation(MUTATION, {
  context: {
    headers: {
      'x-hasura-role': 'poster'
    }
  }
}

我希望这对某人有帮助。很想听听另一种解决方案

关于graphql - 处理 Hasura 中的不同角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67071458/

相关文章:

reactjs - 在事件处理程序中调用 Hook (useMutation) 错误 : "Hooks can only be called inside of the body of a function component"

node.js - 我这个 GraphQL 查询做错了什么?

typescript - Mikro-orm 属性类型日期和字段类型字符串的迁移错误

roles - 在 Meanjs 中添加用户角色

docker - https://localhost:8080/console:Hasura控制台不适用于Chrome浏览器

postgresql - 普通人表与教师和学生的特定表或单独的表?

reactjs - 突变后的 Apollo 客户端更新无法映射原始结果?

java - getPrincipal() 方法返回匿名用户

debian - 抱歉,用户 "user"不允许以 root 身份执行 '/usr/bin/apt-get update'

vue.js - 为什么订阅会导致处理器 100% 负载