fix(role-validate): право на сервис целиком — ошибка

Роль с правом на `HTTPService.Имя` формально валидна и молча не работает:
платформа проверяет вложенный объект (метод шаблона URL, операцию, канал),
маршруты отвечают 403, и по симптому причина не читается. В Конфигураторе
галки на корне сервиса нет вовсе — это недостижимое состояние, а не стилистика.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-17 16:19:55 +03:00
co-authored by Claude Opus 5
parent 756bd857dd
commit 4be10e3d7f
3 changed files with 32 additions and 3 deletions
@@ -1,4 +1,4 @@
# role-validate v1.3 — Validate 1C role structure
# role-validate v1.4 — Validate 1C role structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -176,6 +176,13 @@ $script:kindOwners = @{
"IntegrationServiceChannel" = "IntegrationService"
}
# Подсказка формата для каждого вида сервиса: {0} подставляется как `Тип.Имя` из роли.
$script:serviceLeafHints = @{
"WebService" = "{0}.Operation.<Операция>"
"HTTPService" = "{0}.URLTemplate.<Шаблон>.Method.<Метод>"
"IntegrationService" = "{0}.IntegrationServiceChannel.<Канал>"
}
# Один и тот же вид под разными родителями имеет разный набор: измерение регистра —
# View + Edit, измерение куба внешнего источника — только View. Объединять нельзя,
# объединение молча разрешило бы Edit там, где платформа его не даёт.
@@ -405,6 +412,12 @@ foreach ($obj in $objects) {
Report-Error "${objName}: вид '$nestedKind' бывает только у $($script:kindOwners[$nestedKind])"
} elseif ($isNested -and $null -eq (Get-NestedRights $objectType $nestedKind)) {
Report-Error "${objName}: неизвестный вид вложенности '$nestedKind'"
} elseif (-not $isNested -and $script:serviceLeafHints.ContainsKey($objectType)) {
# Право на сервис целиком платформа игнорирует: проверяется лист (метод шаблона URL,
# операция, канал). Роль формально валидна и молча не работает — 403 на всех
# маршрутах, причина по симптому не читается. В Конфигураторе галки на корне сервиса
# нет вовсе, так что это недостижимое состояние, а не стилистика.
Report-Error "${objName}: право на сервис целиком не действует — назначайте права на вложенные объекты: $($script:serviceLeafHints[$objectType] -f $objName)"
}
# Check rights