Superset 26.700.0: пользовательский контекст и проверяемый act-as
Версия 26.700.0 добавляет пользовательский контекст Superset в публичные провайдеры и команды. Проверяемый act-as для SQL Lab включается явно, поэтому существующие вызовы продолжают работать по-прежнему. Все новые параметры необязательны, прежние значения по умолчанию сохранены.
Новое
SupersetUserReferenceDto теперь можно передать в ChartProvider::list() и getById(), DashboardProvider::getOverview() и getFilterValues(), DatasetProvider::list() и getById(), TableProvider::list() и getMetadata(). Провайдеры выполнят запрос в контексте этого пользователя. Вызовы с null по-прежнему идут через сервисную учётную запись. CreateDatasetFromSqlCommand и CreateVirtualDatasetCommand получили необязательный $user. Виртуальный датасет можно создать от имени пользователя Superset.
У SetSubscriptionExpirationCommand появились отдельные socketTimeout и streamTimeout. Если их не передать, команда возьмёт таймауты общего коннектора.
Новый DashboardProvider::getChartIds(int $dashboardId) возвращает Result с полем chartIds. Допустимы не более 1000 положительных целых ID без повторов, размер ответа ограничен 1 МиБ.
ExecuteSqlCommand получил параметр bool $useActAs = false. При true SQL выполняется с ролями, RLS и табличными правами переданного пользователя. Без useActAs сохраняется прежний режим. Переданный $user используется для лимитера и аудита, а выполнение SQL остаётся на сервисной учётной записи. Коннектор отправляет логин в X-Bx-Act-As и принимает act-as только при точном подтверждении в X-Bx-Act-As-Applied. Пустой логин даёт ошибку act_as_invalid_login, отсутствие подтверждения — act_as_unsupported. Отказ подмены пользователя и запрет доступа к таблицам распознаются отдельно.
SQL Lab теперь разбирает TrinoUserError. Коды PERMISSION_DENIED и BX_TABLE_ACCESS_DENIED превращаются в ошибку доступа, остальные пользовательские ошибки Trino — в ошибку запроса. Если ошибка самого запроса пришла с HTTP 5xx, портал получает 422 и не считает весь Superset недоступным.
Синхронизация ролей останавливается, если Superset не вернул хотя бы одну из запрошенных ролей. Так частичный список не заменит полный набор ролей пользователя. Найденная по логину неактивная учётная запись снова активируется.