Como o Hasura armazena as permissões de acesso das roles às tabelas?

Uma das partes mais importantes do Hasura é o controle de acesso que ele faz nas tabelas, e esse controle é feito usando o conceito de roles (papéis). Um usuário pode ter várias roles diferentes.

O Hasura usa basicamente uma tabela para fazer esse controle, ela é a hdb_catalog.hdb_permission

Um exemplo da tabela (extraida do Hasura v 1.3.3):

table_schema [PK] nametable_name [PK] namerole_name [PK] textperm_type [PK] textperm_def jsonbcomment textis_system_defined boolean
publictenantadmininsert{
"set": {},
"check": {
"tenant_id": {
"_in": "x-hasura-role-admin-test"
}
},
"columns": [
"tenant_name"
],
"backend_only": false
}
false
publictenantadminselect{
"filter": {
"tenant_id": {
"_in": "x-hasura-role-admin-test"
}
},
"columns": [
"tenant_id",
"tenant_name"
],
"computed_fields": [],
"allow_aggregations": false
}
false
publictenantadminupdate{
"set": {},
"filter": {
"tenant_id": {
"_in": "x-hasura-role-admin-test"
}
},
"columns": [
"tenant_name"
]
}
false
publictenantwriterinsert{
"set": {},
"check": {
"tenant_id": {
"_in": "x-hasura-role-writer-test"
}
},
"columns": [
"tenant_name"
],
"backend_only": false
}
false
publictenantwriterselect{
"filter": {
"tenant_id": {
"_in": "x-hasura-role-writer-test"
}
},
"columns": [
"tenant_id",
"tenant_name"
],
"computed_fields": [],
"allow_aggregations": false
}
false
publictenantwriterupdate{
"set": {},
"filter": {
"tenant_id": {
"_in": "x-hasura-role-writer-test"
}
},
"columns": [
"tenant_name"
]
}
false

You should also read: