Я разрабатываю приложение, для которого требуются настраиваемые разрешения для определенной таблицы 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 функцию. Любая помощь с благодарностью!