Сайт ↗
Разделы документации
UI интерфейс · 0.8.1

Content / Access: кто и какие записи может читать

Настройте операции API, обязательные условия чтения и отдельные правила для связанных данных.

На этой странице

Три секции Access

В Entity settings откройте вкладку Access. В ней три секции: Entity CRUD access — доступ к операциям, External READ access — условия чтения записей, Generated routes — адреса будущих маршрутов. Дополнительные пояснения открываются через значки вопроса.

Entity CRUD access

Для каждой операции выберите доступ через Admin и external API. У persistent настраиваются List, Get, Create, Update и Delete. У virtual доступны только включённые операции чтения.

Настройка Кому доступна операция
Admin включен Роли admin в административном API
Admin выключен Не предоставляет эту операцию роли admin; superadmin сохраняет особые права
External: Off External-маршрут не генерируется
Authenticated user Аутентифицированному user и superadmin; одной роли admin недостаточно
Anonymous Любому клиенту, который может обратиться к API

При выборе Anonymous нужно подтвердить открытие операции любому клиенту API. Какие данные она вернёт, зависит от модели и правил чтения ниже. Для публикации статей на сайте достаточно чтения; включать Create/Update/Delete ради этого не нужно.

External READ access

Здесь задаются условия, которые сервер обязательно применяет к external List/Get. Убрать их параметрами клиентского запроса нельзя. Они не распространяются на административное чтение и не управляют записью. Если запись не проходит правило Get, клиент получает 404, а не её содержимое.

Нажмите + Add в нужной секции, выберите поле, оператор и значение. Доступные операторы зависят от типа поля. Для нескольких условий используйте иконку перед корзиной: она оборачивает условие в группу. AND требует выполнения всех условий группы, OR — хотя бы одного. Корзина удаляет выбранное условие или группу целиком.

Пример: страница, блоки и элементы

Представим страницу сайта. Виртуальная сущность основана на PageBlock и включает page (belongsTo → Page) и items (hasMany → BlockItem). Нужно отдавать видимые блоки опубликованных страниц, а внутри каждого блока — только видимые элементы с заполненным заголовком. Настройте три секции:

Секция Условия Что ограничивается
PageBlock isVisible equal true Корневые блоки
Page status equal published Корневые блоки по связанной странице
BlockItem / items AND: isVisible equal true и title does not equal "" Элементы внутри каждого блока

Правила PageBlock и Page проверяются одновременно для каждого корневого блока. Между сущностями не нужно выбирать OR: обе проверки должны пройти. AND/OR объединяет только условия внутри конкретной секции.

В примере "" обозначает пустую строку. В UI выберите Use empty string, если такой вариант показан, или очистите Constant value после ввода. Две кавычки в качестве текста вводить не нужно. Пустая строка отличается от NULL. Если nullable-поле также не должно содержать NULL, добавьте отдельную проверку NULL из доступных операторов. Строка из пробелов тоже не равна пустой — такая проверка пробелы не удаляет.

Что важно для коллекций

Правило items отбирает элементы коллекции до подсчёта total и разделения на страницы. Когда подходящих элементов нет, API всё равно возвращает родительский блок с пустой коллекцией. Это не условие «вернуть блок, только если в нём есть элементы».

Для virtual условия и возможности списков задаются явно: настройки исходных persistent-сущностей автоматически не наследуются. В секции коллекции выбирайте её собственные скалярные поля. Произвольные обратные связи, например items.block, сами в список не добавляются.

Generated routes и применение

В Generated routes можно заранее посмотреть адреса и доступ по текущему черновику. Для применения нажмите Finish, затем Generate → Preview changes и изучите Access and route impact. Само сохранение правил не меняет работающий API: выполните Generate и запустите backend с обновлённым кодом.

Дополнительно: параметры доступа и правила чтения.

Кэш публичных ответов

Если сайт часто запрашивает одинаковые опубликованные данные, откройте Content → настройки сущности → Access → External READ access. Включите Cache public responses и задайте TTL (seconds). По умолчанию кэш выключен; начальное TTL — 30 секунд, допустимо 1–3600. Сохраните сущность, выполните Generate и выпустите новый код вместе с конфигурацией Nginx.

Кэш доступен только при разрешенном анонимном external List или Get, в том числе у virtual. Он работает через сгенерированный Nginx в production/prod-local. Прямой запрос к Go backend в обычном dev не проходит через этот кэш. Запросы с Authorization или Cookie, административные операции и ошибки не кэшируются.

TTL — сколько ответ может оставаться прежним. Изменение записи не сбрасывает кэш автоматически: после правки контента посетитель может видеть старую версию до истечения TTL. Связанные записи и вложенные коллекции также входят в сохраненный ответ. Для данных, где нужно сразу видеть каждое изменение, оставьте кэш выключенным или уменьшите TTL. Правила доступа задайте отдельно для каждой сущности: настройка persistent не включит кэш ее virtual автоматически.

Подробнее — скорость API и публичный кэш.