我正在尝试在 Hasura 上设置“行选择”权限。我有一个(为简洁起见而简化的)数据模型,如下所示
用户
id: UserID
应用
id: AppID
应用权限
user_id: User ID
app_id: App ID
permissions: [ ENUM: Admin, View, Owner ]
饲料
app_id: AppID
feed_data: Some Feed Data
现在,我希望为经过身份验证的用户查询所有 Feed。查询可以是形式
query MyQuery {
feed(limit: 10) {
app_id
feed_data
}
}
app_id
获取经过身份验证的用户具有查看权限的应用query MyQuery {
feed(limit: 10, where: {app_id: {_in: [1, 2]}}) {
app_id
feed_data
}
}
由于 feed
表中没有直接包含 user_id
信息,因此我不能直接对 X-Hasura-User-Id
表使用 feed
属性。我还尝试对 _exists
表使用 app_permission
关系,但我无法在权限子句中放置 app_id
过滤器。
{
"_exists": {
"_where": {
"user_id": {
"_eq": "X-Hasura-User-Id"
}
},
"_table": {
"schema": "public",
"name": "app_permission"
}
}
}
我不确定如何使用 Hasura 进行此类数据建模。任何帮助表示赞赏。谢谢。
答案 0 :(得分:1)
既然你们没有直接关系,我觉得你可以通过appPermissions表查询,而不是直接查询feeds表。
当您创建一个以 appId 作为外键关系的 feeds
表时,Hasura 允许您跟踪这种关系,如下所示
通过这种方式,您可以对 appPerms 表进行嵌套的 graphQL 查询,如下所示
query GetUserFeeds {
test_appPerms {
id
userId
feeds(limit: 10) {
app_id
id
feed_data
}
}
}
答案 1 :(得分:1)
我想建议的另一件事是,您可以尝试在 x-hasura-app-id
旁边使用像 x-hasura-role
这样的会话变量,并围绕它建立您的权限。
https://hasura.io/docs/latest/graphql/core/auth/authorization/roles-variables.html