如何为所有表应用权限?
How to apply permissions per all tables?
我的场景很简单。两个用户角色,一个管理员和一个查看者。查看者可以看到只读数据。是否可以在不为每个 table 手动指定 select 权限的情况下以某种方式设置它?
似乎是一个常见的问题,但我在文档中找不到任何内容。
遗憾的是,没有 API 方法可以同时更改每个 table 的权限(或其他元数据)。它需要 table 名称和架构。
我不确定你的“read-only”数据权限是什么意思,但你可以通过两种方式做到这一点:
- 以编程方式为每个 table 名称使用
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
}
}
}
- 使用元数据 SDK 以编程方式生成
tables.yaml
或 metadata.json
,其中对每个 table 具有更新的 select 权限,然后应用元数据
见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))
我的场景很简单。两个用户角色,一个管理员和一个查看者。查看者可以看到只读数据。是否可以在不为每个 table 手动指定 select 权限的情况下以某种方式设置它? 似乎是一个常见的问题,但我在文档中找不到任何内容。
遗憾的是,没有 API 方法可以同时更改每个 table 的权限(或其他元数据)。它需要 table 名称和架构。
我不确定你的“read-only”数据权限是什么意思,但你可以通过两种方式做到这一点:
- 以编程方式为每个 table 名称使用
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
}
}
}
- 使用元数据 SDK 以编程方式生成
tables.yaml
或metadata.json
,其中对每个 table 具有更新的 select 权限,然后应用元数据
见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))