好的,所以我的表格是这样的:
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/