Настраиваемые пользовательские разрешения на таблицу в Hasura - PullRequest
1 голос
/ 08 марта 2020

Я разрабатываю приложение, для которого требуются настраиваемые разрешения для определенной таблицы c. У меня есть следующая структура данных:

Users
  -> id
  -> name

Accounts
  -> id
  -> name

UserAccounts
  -> userId
  -> accountId
  -> permissionLevel

permissionLevel - это перечисление и может быть: Owner, ReadAndWrite или ReadOnly.

Что бы я хотел Имеется следующее:
1) Если вы Owner из UserAccount, вы можете пригласить других пользователей.
2) Если вы хотите создать новый Account, вы получите разрешение Owner в UserAccounts.
3) Вы не можете добавить себя к UserAccounts, если вы не являетесь Owner из указанных Account.

Проблема, с которой я столкнулся Я не уверен, как решить эту проблему в Хасуре. Я попробовал следующее разрешение Hasura (но мне не хватает возможности расширить предложение where (см. Ниже)):

{
    "_or": [
        {
            "_and": [
                {
                    "accountId": {
                        "_is_null": false
                    }
                },
                {
                    "Account": {
                        "UserAccounts": {
                            "_and": [
                                {
                                    "userId": {
                                        "_eq": "X-Hasura-User-Id"
                                    }
                                },
                                {
                                    "permissionLevel": {
                                        "_eq": "Owner"
                                    }
                                }
                            ]
                        }
                    }
                }
            ]
        },
        {
            "_not": {
                "_exists": {
                    "_table": {
                        "name": "Account",
                        "schema": "public"
                    },
                    "_where": {
                        "UserAccounts": {
                            "accountId": {
                                "_eq": "$accountIdFromQuery" // <-- this does not exist AFAIK
                            }
                        }
                    }
                }
            }
        }
    ]
}

Так что я не знаю, в каком направлении go. Может быть, я просто что-то упустил, может быть, мне нужно использовать пользовательский view или, может быть, мне нужно попробовать пользовательскую postgresql функцию. Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 09 марта 2020

На данный момент мое решение использует триггер события (который запускает функцию AWS Lambda) для записи в таблицу UserAccounts с правами администратора. У Hasura есть документация о том, как этого добиться: https://hasura.io/docs/1.0/graphql/manual/event-triggers/serverless.html

...