mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-18 09:10:21 +03:00
fix(role-validate): право на сервис целиком — ошибка
Роль с правом на `HTTPService.Имя` формально валидна и молча не работает: платформа проверяет вложенный объект (метод шаблона URL, операцию, канал), маршруты отвечают 403, и по симптому причина не читается. В Конфигураторе галки на корне сервиса нет вовсе — это недостижимое состояние, а не стилистика. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
756bd857dd
commit
4be10e3d7f
@@ -33,6 +33,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-validate.ps1"
|
||||
- тип объекта, не имеющий прав в ролях (`Enum`, `CommonModule`, `CommonPicture`, `ScheduledJob` и т.п.) — конфигурация с блоком прав на перечисление не загружается в базу, конфигуратор зависает без сообщений;
|
||||
- незнакомый тип объекта (опечатка);
|
||||
- имя права, которого у этого типа нет;
|
||||
- вид вложенности, невозможный у данного типа, и недопустимое право у вложенного объекта.
|
||||
- вид вложенности, невозможный у данного типа, и недопустимое право у вложенного объекта;
|
||||
- право на сервис целиком (`HTTPService.Имя` и т.п.) — платформа проверяет вложенный объект (метод шаблона URL, операцию, канал), а роль с правом на корень молча не работает: маршруты отвечают `403 Недостаточно прав`.
|
||||
|
||||
Полные списки «тип → права» и виды вложенности — в `role-compile/dsl-reference.md`.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# role-validate v1.3 — Validate 1C role Rights.xml structure
|
||||
# role-validate v1.4 — Validate 1C role Rights.xml structure
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
"""Validates role Rights.xml: root element, global flags, objects, rights, RLS, templates."""
|
||||
import sys, os, argparse, re
|
||||
@@ -194,6 +194,13 @@ KIND_OWNERS = {
|
||||
'IntegrationServiceChannel': 'IntegrationService',
|
||||
}
|
||||
|
||||
# Подсказка формата для каждого вида сервиса: {0} подставляется как `Тип.Имя` из роли.
|
||||
SERVICE_LEAF_HINTS = {
|
||||
'WebService': '{0}.Operation.<Операция>',
|
||||
'HTTPService': '{0}.URLTemplate.<Шаблон>.Method.<Метод>',
|
||||
'IntegrationService': '{0}.IntegrationServiceChannel.<Канал>',
|
||||
}
|
||||
|
||||
# Один и тот же вид под разными родителями имеет разный набор: измерение регистра —
|
||||
# View + Edit, измерение куба внешнего источника — только View. Объединять нельзя,
|
||||
# объединение молча разрешило бы Edit там, где платформа его не даёт.
|
||||
@@ -436,6 +443,14 @@ def main():
|
||||
report_error(f"{obj_name}: вид '{nested_kind}' бывает только у {KIND_OWNERS[nested_kind]}")
|
||||
elif is_nested and get_nested_rights(object_type, nested_kind) is None:
|
||||
report_error(f"{obj_name}: неизвестный вид вложенности '{nested_kind}'")
|
||||
elif not is_nested and object_type in SERVICE_LEAF_HINTS:
|
||||
# Право на сервис целиком платформа игнорирует: проверяется лист (метод шаблона
|
||||
# URL, операция, канал). Роль формально валидна и молча не работает — 403 на всех
|
||||
# маршрутах, причина по симптому не читается. В Конфигураторе галки на корне
|
||||
# сервиса нет вовсе, так что это недостижимое состояние, а не стилистика.
|
||||
hint = SERVICE_LEAF_HINTS[object_type].format(obj_name)
|
||||
report_error(f"{obj_name}: право на сервис целиком не действует — "
|
||||
f"назначайте права на вложенные объекты: {hint}")
|
||||
|
||||
# Check rights
|
||||
for child in obj:
|
||||
|
||||
Reference in New Issue
Block a user