Защита листов
Доступ к таблице выдаётся на уровне документа, но у отдельного листа внутри таблицы может стоять защита. API это учитывает: токен наследует права того пользователя, которому он принадлежит. Если пользователю лист закрыт, его токен (и подключённый им AI-агент) видит ровно то же ограничение.
Это касается и подключений через MCP: агент обращается к тому же API, поэтому правила защиты действуют одинаково.
Скрытие значений листа
В настройках защиты листа можно скрыть значения от конкретных пользователей (видят только те, кто в списке разрешённых, и владелец таблицы).
Если значения листа скрыты от пользователя токена, чтение диапазона этого листа отклоняется:
GET /documents/{document}/values/{range}— ответ403с кодом"error": "sheet_protected";GET /documents/{document}/values/batchGet— ответ200, для такого диапазона приходят полеerrorс текстом причины и полеerrorCodeсо значениемsheet_protected, остальные диапазоны отдаются нормально.
Вебхуки учитывают то же правило: уведомление не содержит ячеек листа, значения которого скрыты от пользователя, создавшего подписку. Таких ячеек нет в cells, ranges и changes, они не входят в cellCount, а если других изменений нет, уведомление не отправляется.
Защита от редактирования
Через API защита проверяется по правилам приложения с одним отличием: владельца таблицы защита в API не ограничивает (см. ниже). Например, владелец может через API переименовать защищённый лист, хотя в интерфейсе это закрыто.
Правила:
- Защищённый лист. Записывать можно только в ячейки, которые в настройках защиты оставлены открытыми (исключения). Если для исключений указан список участников, то только этим участникам; без списка — всем, у кого есть право редактировать таблицу.
- Защищённый диапазон. Записывать в него могут только участники из его списка.
Запрос, который затрагивает хотя бы одну закрытую ячейку, возвращает 403, и ничего не записывается:
PUT /documents/{document}/values/{range};POST /documents/{document}/values/batchUpdate— пакет атомарный, поэтому закрытая ячейка в любом диапазоне отклоняет весь запрос;POST /documents/{document}/values/append— проверяются строки, куда попадут новые значения;POST /documents/{document}/values/clear— проверяются заполненные ячейки диапазона.
Запись отклоняется и в том случае, когда от пользователя токена скрыты значения листа: лист, который нельзя прочитать, нельзя и изменить.
Ответ на отказ из-за защиты содержит код "error": "sheet_protected". По нему
программа отличает защиту от нехватки прав токена или ограничений тарифа:
менять права токена или тариф здесь бесполезно, нужно попросить владельца
таблицы добавить пользователя в список защиты.
{
"message": "Запись запрещена: ячейки защищены настройками защиты листа или диапазона. Менять их могут владелец таблицы и люди из списка защиты.",
"error": "sheet_protected"
}
Операции с листами
Защита действует и на сам лист. Защищённый лист может переименовать или
удалить только владелец таблицы, даже если у листа есть открытые ячейки.
Для остальных вернётся 403 с кодом sheet_protected:
PATCH /documents/{document}/sheets/{sheet};DELETE /documents/{document}/sheets/{sheet}.
Лист, на котором есть защищённые диапазоны, тоже может удалить только
владелец таблицы, иначе вернётся 403 с кодом sheet_protected.
Переименовывать такой лист могут все, у кого есть право редактировать таблицу.
Создание нового листа защитой других листов не ограничено.
Владелец таблицы
Владелец таблицы не ограничен защитой листов: его токен читает и пишет любые листы документа.
Скрипты
Скрипты Coverse подчиняются тем же правилам: скрипт участника на защищённом листе меняет только открытые ячейки, а менять защиту может только скрипт владельца таблицы. Подробнее — в статье Права и безопасность скриптов.