mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-20 00:45:54 +03:00
Замер на платформе (debug/role-edit/FINDINGS.md): роль хранит только то,
что отличается от её умолчаний. При setForNewObjects=false на верхнем
уровне живут разрешения, а любой запрет выбрасывается (проверены Update,
Edit, Delete; узел из одних запретов удаляется целиком); при true —
наоборот. У реквизитных вложенных ту же роль играет
setForAttributesByDefault. Конфликт решается в пользу разрешения.
Отсюда три правки, общие для обоих навыков:
1. Прямое замыкание идёт только от РАЗРЕШЁННЫХ прав. Раньше запрет тянул
зависимости как разрешения: "Catalog.X: {Edit: false}" выдавал
Read, Update и View — навык раздавал права на основании запрета.
2. Появилось обратное замыкание: запрет уносит права, которым
запрещённое нужно. Сверено с платформой — при setForNewObjects=true
она к Update=false дописывает те же десять запретов.
3. Записи, совпавшие с умолчанием роли, не пишутся: платформа их всё
равно выбросит, а файл разошёлся бы с базой. Отброшенное
перечисляется в stderr, сообщение операции объясняет причину.
Правило применяется только там, где замерено: внешние источники данных
под него не попадают. Обе функции заведены семьями в check-inline-drift.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
28 lines
1.6 KiB
JSON
28 lines
1.6 KiB
JSON
{
|
|
"name": "Позитив: операции сервисов, вложенные объекты и внешний источник данных",
|
|
"input": {
|
|
"name": "Интеграция",
|
|
"synonym": "Интеграция",
|
|
"objects": [
|
|
"WebService.Обмен.Operation.Загрузить: Use",
|
|
"HTTPService.ПередачаДанных.URLTemplate.Файлы.Method.get: Use",
|
|
"IntegrationService.Канал.IntegrationServiceChannel.Основной: Use",
|
|
"Catalog.Товары.Attribute.Цена: View, Edit",
|
|
"Subsystem.Продажи.Subsystem.Опт: View",
|
|
"CalculationRegister.Начисления.Recalculation.Перерасчет: Read, Update",
|
|
"ExternalDataSource.Источник: Use, Administration",
|
|
"ExternalDataSource.Источник.Table.Заказы: Read, View",
|
|
"ExternalDataSource.Источник.Table.Заказы.Field.Сумма: View, Edit",
|
|
"ExternalDataSource.Источник.Cube.Продажи.Dimension.Период: View"
|
|
],
|
|
"setForAttributesByDefault": false
|
|
},
|
|
"expect": {
|
|
"files": [
|
|
"Roles/Интеграция/Ext/Rights.xml"
|
|
]
|
|
},
|
|
"skipValidation": true,
|
|
"skipPlatformVerify": "роль ссылается на объекты, которых нет в пустой фикстуре и которые не создаёт ни один навык (веб-сервис, HTTP-сервис, сервис интеграции, внешний источник данных, перерасчёт); платформа отвергает такую конфигурацию по составу, а не по формату Rights.xml"
|
|
}
|