首页 > 解决方案 > Hasura:通过 API 调用在运行时(动态)更改 Hasura 中的权限/模式

问题描述

我正在尝试通过 API 调用在运行时(动态)更改 Hasura 中的权限,如下所示:

curl --location --request POST 'https://hasura-0ccfcde0.nhost.app/v1/query' \
--header 'x-hasura-role: admin' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type" : "create_update_permission",
    "args" : {
        "table" : "customers",
        "role" : "users",
        "permission" : {
            "check" : {
                "user_id" : {
                  "_ne": ""
                }
            },
            "filter" : {
                "user_id" : "X-Hasura-User-Id"
            },
            "set":{
                "name":"X-Hasura-User-Id"
            },
            "columns":["name","email"]
        }
    }
}'

但它返回

{
    "path": "$.args",
    "error": "restricted access : admin only",
    "code": "access-denied"
}

我正在关注:https ://hasura.io/docs/1.0/graphql/core/api-reference/schema-metadata-api/permission.html#create-update-permission ,您也可以在屏幕截图中看到 在此处输入图像描述

标签: runtimeschemametadatahasura

解决方案


仅仅放入Header是不够的adminx-hasura-role如果您考虑一下,这将是一个巨大的漏洞,因为任何人都可以向您的后端发出此请求。您甚至在示例 CURL 请求中共享了端点!

相反,您需要x-hasura-admin-secret使用您为部署配置的值传递标头。这个值应该受到极大的保护,因为任何有权访问它的人都可以非常广泛地访问 Hasura 并且可能在那时你的整个数据库,具体取决于你的 Hasura 配置的样子

curl --location --request POST 'https://hasura-0ccfcde0.nhost.app/v1/query' \
--header 'x-hasura-admin-secret: whatever-your-configured-admin-secret-is' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type" : "create_update_permission",
    "args" : {
        "table" : "customers",
        "role" : "users",
        "permission" : {
            "check" : {
                "user_id" : {
                  "_ne": ""
                }
            },
            "filter" : {
                "user_id" : "X-Hasura-User-Id"
            },
            "set":{
                "name":"X-Hasura-User-Id"
            },
            "columns":["name","email"]
        }
    }
}

或者,admin如果您不想直接使用 Hasura 密码,也可以使用使用该角色签名的 JWT 进行调用。在这种情况下,您可以将其设置在带有声明集的Authorization标题中x-hasura-role: admin


推荐阅读