Правила Firestore, нужна возможность «подсказки» пути разрешения - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующий вариант использования, который я не могу решить с помощью правил пожарного депо (см. Рисунок).

Вариант использования делегированных прав

Мой пользователь-техник принадлежит одной компании и двум командам

Согласно компаниям и командам, в которые он входит, он должениметь доступ к документам.

Документы могут быть общими для групп и / или компаний.

Сегодня этот сценарий невозможно реализовать с помощью правил, поскольку невозможно «намекнуть» правило о правильном пути разрешения.

Например: техник запрашивает все "внутренние кошки" документы (ему разрешено, так как он является членом команды "кошек"), но правило не может догадаться, что это разрешено, потому что он является членомкоманда "кошек"

Примечание. Эта проблема легко решается во время записи, поскольку существует полезная нагрузка, в которой может быть предоставлена ​​вся необходимая информация.Но во время чтения нет полезной нагрузки !!!

было бы замечательно иметь возможность давать пользовательские параметры для запросов, например:

db
    .collection('documents')
    .where('access', 'array-contains', 'cats-internal')
    .userParams({"accessBy": "teams", "value": "cats"})
    .get()
    .then...

с правилом, настроенным как:

match /documents/{docid} {
    allow read: if 
        ( 
            request.resource.userParams.accessBy == 'teams' && 
            get(/user/<userId>).teams.has(request.resource.userParams.value) && 
            get(/teams/<request.resource.userParams.value>).docs.hasAny(resource.data.rights)
            ||
            request.resource.userParams.accessBy == 'company' && 
            get(/user/<userId>).company == request.resource.userParams.value && 
            get(/company/<request.resource.userParams.value>).docs.hasAny(resource.data.rights)
        )
}

Большое спасибо заваши мысли, предложения, обходные пути или ваши голоса для продвижения этой идеи ;-)

...