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] name | table_name [PK] name | role_name [PK] text | perm_type [PK] text | perm_def jsonb | comment text | is_system_defined boolean |
public | tenant | admin | insert | { "set": {}, "check": { "tenant_id": { "_in": "x-hasura-role-admin-test" } }, "columns": [ "tenant_name" ], "backend_only": false } | false | |
public | tenant | admin | select | { "filter": { "tenant_id": { "_in": "x-hasura-role-admin-test" } }, "columns": [ "tenant_id", "tenant_name" ], "computed_fields": [], "allow_aggregations": false } | false | |
public | tenant | admin | update | { "set": {}, "filter": { "tenant_id": { "_in": "x-hasura-role-admin-test" } }, "columns": [ "tenant_name" ] } | false | |
public | tenant | writer | insert | { "set": {}, "check": { "tenant_id": { "_in": "x-hasura-role-writer-test" } }, "columns": [ "tenant_name" ], "backend_only": false } | false | |
public | tenant | writer | select | { "filter": { "tenant_id": { "_in": "x-hasura-role-writer-test" } }, "columns": [ "tenant_id", "tenant_name" ], "computed_fields": [], "allow_aggregations": false } | false | |
public | tenant | writer | update | { "set": {}, "filter": { "tenant_id": { "_in": "x-hasura-role-writer-test" } }, "columns": [ "tenant_name" ] } | false |