Dry run publish 1C access profiles
This commit is contained in:
@@ -29,6 +29,7 @@ http://server/base/hs/sfera/v1/metadata/apply
|
||||
- `data.read` - чтение данных через ограниченный запрос или менеджер объекта.
|
||||
- `data.write` - изменение данных только при явном `allow_mutation`.
|
||||
- `metadata.apply` - изменение структуры не выполняется из HTTP runtime. Возвращает план установки `.cfe`; применение делает Windows Agent через Designer.
|
||||
- `access.profile.apply` - dry-run проверки плана профиля доступа через `/v1/metadata/apply`. Универсальный мост подтверждает профиль, роли и операции, но реальную запись профилей доступа выполняет только отдельный адаптер под конкретную конфигурацию/БСП или Windows Agent.
|
||||
|
||||
## Безопасность
|
||||
|
||||
@@ -41,4 +42,3 @@ http://server/base/hs/sfera/v1/metadata/apply
|
||||
- `dry_run=false`.
|
||||
|
||||
Без этого операции изменения возвращают блокировку.
|
||||
|
||||
|
||||
@@ -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;
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьКоллекциюМетаданных(Коллекции, ИмяКоллекции, КоллекцияМетаданных)
|
||||
Объекты = Новый Массив;
|
||||
Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл
|
||||
|
||||
Reference in New Issue
Block a user