gimntut / databoom-talking

Территория обсуждений потенциальных возможностей databoom

Home Page:https://github.com/gimntut/databoom-talking/issues

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

О системных и полусистемных коллекциях

gimntut opened this issue · comments

Хранить всякую системную информацию удобно в коллекциях. Это позволяет пользоваться одинаковыми инструментами для всех задач. На данный момент OData используется только на фронтенде. Но со временем будет обязательно использоваться и на бэкенде. К примеру, перед добавлением нужно проверить, что в коллекции не более 3-х записей такого же типа. Проверить это можно только с помощью запроса. И совершенно логично использовать на бэкенде для этого тот же механизм, что и на фронтенде. И совершено логично, что проверки связанные с файлами удобно проводить обращением к коллекциям, а не с использованием отдельного API для API.

Тут приходим к тому, что коллекции бывают трёх типов:

Обычные, системные и полу-системные.

Обычные - это те коллекции, которые есть в databoom сейчас.

Системные - которые создаются системой (не разработчиком) и не доступны на фроненде.

Полу-системные - коллекции созданные разработчиком, доступные на фронтеде. Но имеющие ограничения или особенности накладываемые системой.

Чтобы отличать системные коллекции от обычных нужно использовать префиксы. Например $ - для полу-системных, и _ - для системных.

Естественно создавать коллекции с именами начинающимися на префиксы разработчик не может, во избежание проблем.

Тогда путь к системной коллекции файлов будет иметь путь

/api1/dbname/collections/_files

и будет доступен доступен только для бэкенда.

Гораздо интереснее полу-системные коллекции.

К примеру, пусть разработчик создаёт коллекцию коллег пользователя:

/api1/dbname/user/collections/coworkers

обратите внимание на /user/ в пути - это особый путь для коллекций имеющих отношение к пользователю. В таких коллекциях хранятся данные влияющие на права доступа.

Если обращаться по этому пути, то это обыкновенная коллекция с данными имеющими только к текущему пользователю.

Если же обратиться по пути

/api1/dbname/collections/$user_coworkers

то получим то же самое, но с дополнительным полем _user_id, только если обращаться со стороны фронтенда, это будут данные текущего пользователя, а если обращаться со стороны бэкенда, то данные всех пользователей.

Все это в комплексе позволяет описывать правила авторизации любой сложности.