Dry run publish 1C access profiles
CI / python (push) Has been cancelled
CI / rust (push) Has been cancelled

This commit is contained in:
2026-05-21 19:22:02 +03:00
parent 6051f59e08
commit 29bbe1dca6
4 changed files with 92 additions and 4 deletions
@@ -49,7 +49,8 @@
КонецЕсли;
Возврат ОтветJSON(BridgeMetadataApply(
ПолучитьПоле(Контекст, "payload", Новый Структура),
ПолучитьПоле(Контекст, "dry_run", Истина)));
ПолучитьПоле(Контекст, "dry_run", Истина),
ПолучитьПоле(Контекст, "allow_mutation", Ложь)));
КонецФункции
#КонецОбласти
@@ -64,6 +65,7 @@
Результат.Вставить("timestamp", ТекущаяДата());
Результат.Вставить("mutation_supported", Истина);
Результат.Вставить("metadata_apply_supported", Ложь);
Результат.Вставить("access_profile_apply_supported", Истина);
Возврат Результат;
КонецФункции
@@ -153,7 +155,11 @@
Возврат ОшибкаSFERA("Generic write adapter is intentionally not enabled yet. Implement object-specific handlers first.");
КонецФункции
Функция BridgeMetadataApply(Параметры, DryRun)
Функция BridgeMetadataApply(Параметры, DryRun, AllowMutation)
Операция = Строка(ПолучитьПоле(Параметры, "operation", ""));
Если Операция = "access.profile.apply" Тогда
Возврат BridgeAccessProfileApply(Параметры, DryRun, AllowMutation);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("status", "planned");
Результат.Вставить("message", "Changing configuration structure is performed by SFERA Windows Agent through Designer and .cfe update, not by runtime HTTP.");
@@ -162,6 +168,27 @@
Возврат Результат;
КонецФункции
Функция BridgeAccessProfileApply(Параметры, DryRun, AllowMutation)
Профиль = ПолучитьПоле(Параметры, "profile", Новый Структура);
Операции = ПолучитьПоле(Параметры, "operations", Новый Массив);
ИмяПрофиля = Строка(ПолучитьПоле(Профиль, "qualified_name", ПолучитьПоле(Профиль, "name", "")));
Если ПустаяСтрока(ИмяПрофиля) Тогда
Возврат ОшибкаSFERA("profile.name or profile.qualified_name is required for access.profile.apply");
КонецЕсли;
Если Не DryRun И Не AllowMutation Тогда
Возврат ОшибкаSFERA("Access profile mutation is blocked. Use dry_run=true or allow_mutation=true with project mutation guard enabled.");
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("status", ?(DryRun, "dry_run", "planned"));
Результат.Вставить("operation", "access.profile.apply");
Результат.Вставить("profile", ИмяПрофиля);
Результат.Вставить("operations_count", КоличествоЭлементовSFERA(Операции));
Результат.Вставить("operations", Операции);
Результат.Вставить("message", "Access profile plan was accepted by SFERA extension. Runtime mutation is not executed by the generic bridge; apply through a configuration-specific adapter or Windows Agent.");
Результат.Вставить("dry_run", DryRun);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -210,6 +237,16 @@
Возврат ЗначениеПоУмолчанию;
КонецФункции
Функция КоличествоЭлементовSFERA(Значение)
Если Значение = Неопределено Тогда
Возврат 0;
КонецЕсли;
Если ТипЗнч(Значение) = Тип("Массив") Или ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Соответствие") Тогда
Возврат Значение.Количество();
КонецЕсли;
Возврат 0;
КонецФункции
Процедура ДобавитьКоллекциюМетаданных(Коллекции, ИмяКоллекции, КоллекцияМетаданных)
Объекты = Новый Массив;
Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл