【问题标题】:How to apply permissions per all tables?如何为所有表应用权限?
【发布时间】:2020-08-07 02:40:07
【问题描述】:

我的场景很简单。两个用户角色,一个管理员和一个查看者。查看者可以看到只读数据。是否可以在不为每个表手动指定选择权限的情况下以某种方式设置它? 似乎是一个常见问题,但我在文档中找不到任何内容。

【问题讨论】:

    标签: hasura


    【解决方案1】:

    不幸的是,没有 API 方法可以同时更改每个表的权限(或其他元数据)。它需要表名和架构。

    我不确定您的“只读”数据权限是什么意思,但您可以通过两种方式做到这一点:

    1. 以编程方式使用create_select_permission 为每个表名调用元数据API
    POST /v1/query HTTP/1.1
    Content-Type: application/json
    X-Hasura-Role: admin
    
    {
        "type" : "create_select_permission",
        "args" : {
            "table" : "article",
            "role" : "user",
            "permission" : {
                "columns" : "*",
                "filter" : {
                    "author_id":{ "_eq": "X-Hasura-User-Id" }
                 },
                 "limit": 100,
                 "allow_aggregations": false
            }
        }
    }
    
    1. 使用元数据 SDK 以编程方式生成对每个表具有更新选择权限的 tables.yamlmetadata.json,然后应用元数据

    https://github.com/hasura/graphql-engine/issues/5459

    import { Convert } from './customMetadataConverter'
    import { TableEntry } from '../generated/HasuraMetadataV2'
    
    // Read "tables.yaml" file as text from filesystem
    const tablesMetadataFile = fs.readFileSync('./metadata/tables.yaml', 'utf8')
    // Convert it to JSON object with type annotation using loadYAML utility
    const tablesMetadata: TableEntry[] = Convert.loadYAML(tablesMetadataFile)
    
    for (let table of tablesMetadata) {
      if (table.insert_permissions.length == 0) table.insert_permissions = []
      // Put the permission you want applied on every table here
      table.insert_permissions.push({
         columns : "*",
         filter : { user_id: { _eq: "X-Hasura-User-Id" } },
         limit: 100,
         allow_aggregations: false
      })
    }
    // Ouput the updated "tables.yaml" to filesystem
    fs.writeFileSync('./tables-updated.yaml', Convert.metadataToYAML(tablesMetadata))
    

    【讨论】:

    • 我使用了第二种方法。
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2010-12-13
    • 2019-06-26
    • 2017-11-21
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多