Permissions 在GraphQL和Hasura中实现自定义用户权限
我正在创建一个webapp,允许用户在几个不同的房间里进行交流,我希望我可以使用GraphQL和Hasura来完成这个项目。管理员可以创建/删除文件室(wow文件室、lol文件室、pubg文件室)、创建/删除用户、创建/删除权限(admin、wow、lol、pubg)以及为用户分配角色。用户将能够看到他们所允许的任何房间Permissions 在GraphQL和Hasura中实现自定义用户权限,permissions,graphql,hasura,Permissions,Graphql,Hasura,我正在创建一个webapp,允许用户在几个不同的房间里进行交流,我希望我可以使用GraphQL和Hasura来完成这个项目。管理员可以创建/删除文件室(wow文件室、lol文件室、pubg文件室)、创建/删除用户、创建/删除权限(admin、wow、lol、pubg)以及为用户分配角色。用户将能够看到他们所允许的任何房间 问题是,我想确保只有管理员才能创建/删除这些文件室/用户/权限,并且只有正确的用户才能看到这些文件室。有没有办法让Hasura检查给定用户的权限并返回适当的数据?我认为我需要编
问题是,我想确保只有管理员才能创建/删除这些文件室/用户/权限,并且只有正确的用户才能看到这些文件室。有没有办法让Hasura检查给定用户的权限并返回适当的数据?我认为我需要编写一个自定义解析器,但不确定如何实现,或者它是否是正确的解决方案。虽然Hasura可以使用Hasura处理动态角色(您可以使用API动态创建新角色和新权限规则),但我认为在这种情况下不需要 问题是,我想确保只有管理员可以 创建/删除这些房间/用户/权限,并且只有正确的 用户可以看到这些房间。有没有办法让Hasura检查一下 指定用户的权限并返回相应的数据 Hasura允许您设置一个权限规则来遍历关系,这使得这成为可能。看看这本书 假设您的模型是
房间
、用户
和房间_用户
,并且您已设置了关系,以便房间。用户
返回特定房间的用户列表,则房间
表上的用户
角色的权限可以表示为:
Allow SELECT on a row in rooms if
rooms.users.id: _eq: x-hasura-user-id
这意味着:如果一个文件室的用户列表至少包含一个等于x-hasura-user-id的用户id,则授予对该文件室的访问权
我在heroku应用程序上设置了此选项:
在GraphiQL中尝试以下查询:
x-hasura-user-id
,您将看到相同查询的不同结果。基本上是只有当前用户才能访问的正确房间- 用户和房间映射:
- 房间权限:
x-hasura-role: user
x-hasura-user-id: 1
query {
rooms {
id
name
}
}