Что такое datasette-acl?

Datasette — это мощный open-source инструмент для исследования и публикации данных из SQLite-баз. По умолчанию Datasette не требует аутентификации: любой посетитель может просматривать данные и выполнять SQL-запросы. Однако система плагинов позволяет добавить различные механизмы авторизации — учётные записи пользователей, SSO (единый вход) или API-ключи.

Для сценариев, где одним экземпляром Datasette пользуются несколько человек с разными уровнями доступа, был создан плагин datasette-acl (ACL — Access Control List, список контроля доступа). Версия 0.6a0 расширяет datasette-acl от управления правами только на таблицы до полноценной системы разграничения доступа к произвольным ресурсам. Большую часть работы выполнил Алекс Гарсия — разработчики оттачивают плагин, который позволит многопользовательским инсталляциям Datasette точечно контролировать, кто и к каким ресурсам имеет доступ.

ℹ Статус проекта
Версия 0.6a0 является pre-release (альфа-версией). Плагин активно развивается и пока не рекомендован для критически важных production-окружений без дополнительного тестирования.

Что нового в версии 0.6a0

От таблиц — к универсальным ресурсам

Этот релиз расширяет datasette-acl от управления правами только на уровне таблиц к общей системе разделения ресурсов. Теперь плагин умеет хранить и разрешать права для любого типа ресурса. datasette-acl не ограничен таблицами — он может хранить и разрешать гранты для любого типа ресурсов, определённого плагином: документов, списков, рабочих книг, пространств для комментариев, kanban-досок и так далее.

Публичные аудитории (Public Audience Grants)

В релизе добавлены полноценные гранты для публичных аудиторий: everyone (все), authenticated (авторизованные пользователи) и anonymous (анонимные). Также добавлен раздел General access на странице ACL для универсальных ресурсов.

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

Поддержка ролей

Добавлена поддержка ролей через хук datasette_acl_roles() и вспомогательную функцию standard_roles(). Это очень удобная абстракция: сырые гранты на действия гибки, но пользователи мыслят категориями ролей. Плагин может объявлять удобные роли для своего типа ресурса с помощью хука datasette_acl_roles, связывая имя роли с набором действий, которые она даёт. Почти каждый плагин хочет одни и те же три накопительные роли — Viewer (просмотрщик), Editor (редактор) и Manager (управляющий) — поэтому вместо их ручного объявления используйте фабрику standard_roles().

JSON API

Расширен и задокументирован JSON API для чтения, выдачи, обновления, отзыва прав и автодополнения в выборщике (picker autocomplete). JSON HTTP API для программного чтения грантов на ресурсы и управления ими задокументирован в docs/json-api.md.

Прочие улучшения

Добавлен объект-значение Principal для вспомогательных функций Python при выдаче грантов. Обновлён UI администратора групп и ACL-ресурсов с использованием общего файла acl.css. Универсальная страница ACL-ресурса теперь является каноническим интерфейсом для управления правами на таблицы. Гранты для общего доступа теперь хранятся с использованием явных значений principal_type вместо устаревших wildcard-идентификаторов акторов.

💡 Ключевое изменение
С версии 0.6a0 гранты для публичных аудиторий хранятся через явный principal_type — это ломает обратную совместимость с ранними версиями хранилища прав. При обновлении проверьте свои миграции.

Как это работает: архитектура прав доступа


graph TD
    A[Запрос пользователя] --> B{Тип актора}
    B -->|Конкретный пользователь| C[Проверка actor_id]
    B -->|Группа| D[Проверка group_id]
    B -->|Публичная аудитория| E[Проверка principal_type]
    C --> F{Грант найден?}
    D --> F
    E --> F
    F -->|Да| G[Доступ разрешён]
    F -->|Нет| H[Динамические группы]
    H --> I{Атрибуты актора совпадают?}
    I -->|Да| G
    I -->|Нет| J[Доступ запрещён]

Гранты для аудиторий хранят только principal_type; их столбцы actor_id и group_id остаются пустыми. Проверки прав сопоставляют гранты акторов по actor_id, гранты групп — по group_id, а гранты общего доступа — по principal_type.

Установка и первоначальная настройка

Установите плагин в то же окружение, что и Datasette. Плагин требует Datasette версии 1.0a15 или выше.

datasette install datasette-acl

Права доступа сохраняются во внутренней базе данных. Это означает, что Datasette нужно запускать с параметром --internal path/to/internal.db, иначе права будут сбрасываться при каждом перезапуске.

Пример запуска для локального тестирования:

datasette fixtures.db --internal internal.db \
  -s permissions.datasette-acl.id root \
  -s plugins.datasette-acl.table-creator-permissions '["insert-row", "update-row"]' \
  -s plugins.datasette-acl.dynamic-groups.staff.is_staff true \
  --root --secret 1 --reload

Эта конфигурация гарантирует, что любой пользователь, создавший таблицу, получит начальные права insert-row и update-row. Также настраивается динамическая группа: любой актор с {"is_staff": true} в своём JSON будет считаться членом группы staff.

Управление пользователями и группами

Плагин поддерживает настройку прав для отдельных таблиц, контролируя различные действия, а также для любого пользовательского типа ресурсов, зарегистрированного плагином. Гранты могут выдаваться отдельным пользователям, группам пользователей или публичным аудиториям — например, «любой авторизованный пользователь».

Динамические группы

Особенно мощной возможностью являются динамические группы (dynamic groups). Вы можете определять правила для групп акторов на основе их атрибутов, не добавляя пользователей вручную. Это достигается через конфигурацию dynamic groups. Динамические группы определяются с помощью блоков allow. Например, можно задать группу admin для всех пользователей с "is_admin": true и группу sales для тех, у кого в массиве departments есть значение "sales".

plugins:
  datasette-acl:
    dynamic-groups:
      admin:
        is_admin: true
      sales:
        departments: ["sales"]

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

Права создателя таблиц

Если вы разрешаете обычным пользователям создавать таблицы в Datasette, возможно, вы хотите, чтобы они сохраняли «владение» этими таблицами — так, чтобы другие пользователи не могли изменять их без разрешения создателя. Настройка table-creator-permissions позволяет автоматически назначать права актору, создавшему таблицу.

Журнал аудита

Журнал аудита (audit log) отслеживает, какие права были добавлены и удалены, и отображается внизу страницы управления правами. Это особенно важно в корпоративных окружениях, где необходимо соответствие нормативным требованиям.

Сравнение подходов к управлению правами

В экосистеме Datasette существует несколько способов управлять доступом:

ПодходГибкостьТребует кодаGUIХранениеАудит
datasette-aclВысокаяНетInternal DB
allow-блоки в configСредняяНетYAML/JSON
datasette-permissions-sqlОчень высокаяДа (SQL)Любая БДВручную
Метаданные (metadata.json)НизкаяНетФайл
⚠ Важно
При использовании datasette-acl вместе с allow-блоками в конфигурации следите за приоритетами: плагин добавляет собственный обработчик permission_allowed, который работает параллельно со встроенными механизмами Datasette.

Зачем это важно: Datasette выходит за рамки read-only

Datasette растёт за пределы своих истоков как приложения для работы с данными в режиме только для чтения — в более богатую экосистему инструментов для работы с данными.

Изначально Datasette позиционировался как инструмент для публикации данных. Но сегодня вокруг него растёт целая экосистема: datasette-apps для создания HTML-приложений, datasette-agent для AI-взаимодействия, и теперь datasette-acl для многопользовательского совместного доступа.

Разработчики хотят реализовать совместное редактирование приложений, особенно по мере начала использования datasette-acl. Это подтверждает общий вектор: Datasette превращается в платформу с продуманной моделью безопасности, а не просто в статический просмотрщик SQLite.

Быстрый старт: пошаговая установка

📝 Пример настройки
Полный цикл от установки до работающего ACL занимает около 5 минут.

Шаг 1. Установите плагин:

pip install datasette-acl

Шаг 2. Запустите Datasette с внутренней базой для хранения прав:

datasette mydata.db --internal acl-store.db --root

Шаг 3. Откройте ссылку из консоли, авторизуйтесь как root.

Шаг 4. Перейдите к нужной таблице → меню действий → Manage permissions (Управление правами).

Интерфейс настройки прав таблицы находится по адресу /-/acl/resource/table/<имя-базы>/<имя-таблицы>. К нему можно получить доступ через меню действий на странице таблицы.

Шаг 5. Назначьте права: конкретным пользователям, группам или публичным аудиториям (everyone, authenticated, anonymous).

Итоги

Выпуск datasette-acl 0.6a0 — это важный шаг к превращению Datasette в полноценную многопользовательскую платформу. Основные достижения релиза:

  • Универсальность: права теперь можно выдавать не только на таблицы, но и на любые ресурсы плагинов
  • Публичные аудитории: тонкая настройка для анонимных, авторизованных и всех пользователей
  • Роли: удобная абстракция через standard_roles() вместо ручного перечисления действий
  • JSON API: программное управление правами
  • Обновлённый UI: единый стиль для всех страниц управления доступом

Плагин находится в активной разработке, и с учётом того, как быстро развивается экосистема Datasette в 2026 году, можно ожидать стабильного релиза в ближайшие месяцы.