首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hasura:通过API调用在运行时(动态)更改Hasura中的权限/模式

Hasura:通过API调用在运行时(动态)更改Hasura中的权限/模式
EN

Stack Overflow用户
提问于 2020-12-17 19:08:43
回答 1查看 176关注 0票数 0

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

代码语言:javascript
运行
复制
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"]
        }
    }
}'

但它返回的是

代码语言:javascript
运行
复制
{
    "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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-18 01:09:40

仅仅将admin放在x-hasura-role头中是不够的。如果你仔细想想,这将是一个巨大的漏洞,因为任何人都可以向你的后端发出这个请求。您甚至已经在示例CURL请求中共享了端点!

相反,您需要使用为您的部署配置的值来传递x-hasura-admin-secret头。这个值应该格外小心,因为任何有权访问它的人都对Hasura有相当大的开放访问权限,并且可能是整个数据库,这取决于您的Hasura配置是什么样子

代码语言:javascript
运行
复制
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进行调用。在本例中,您将使用x-hasura-role: admin声明集在Authorization标头中设置它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65339570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档