docs(role-compile,role-edit): убрано то, что навык объясняет сам

Таблица «что хранится при каких умолчаниях роли» ушла из инструкции:
модель попадает в этот случай ровно в момент, когда навык уже печатает
«запрет совпадает с умолчанием роли и платформой не хранится». Вместо
описания механики сообщение дополнено подсказкой, где запрет имеет
смысл, — теперь вывод самодостаточен, а инструкция короче.

Там же сжаты формулировки, которые дублировали текст ошибок: про отказ
до записи, про право сервиса на корне, про ограничение RLS без права.
Назначение deny-rights в таблице операций названо прямо: закрыть
реквизит или ТЧ, которые иначе наследуют права объекта.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
This commit is contained in:
Nick Shirokov
2026-09-13 20:52:29 +03:00
co-authored by Claude Opus 5
parent 9fcf7329ba
commit e8c92362d5
6 changed files with 19 additions and 31 deletions
+5 -17
View File
@@ -37,7 +37,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -Rol
| `add-rights` | `Тип.Имя: Право1, Право2` или `Тип.Имя: @пресет` | Добавить права, прежние сохранить |
| `set-rights` | то же | Заменить набор прав объекта целиком |
| `remove-rights` | `Тип.Имя: Право1, Право2` — снять права<br>`Тип.Имя` — удалить объект целиком | Снять права |
| `deny-rights` | `Тип.Имя: Право1, Право2` | Запретить права явно |
| `deny-rights` | `Тип.Имя: Право1, Право2` | Закрыть реквизит или ТЧ, которые иначе наследуют права объекта |
| `set-rls` | `Тип.Имя.Право: условие`<br>`Тип.Имя.Право[Поле1, Поле2]: условие` | Ограничение доступа к данным |
| `remove-rls` | `Тип.Имя.Право` — снять все<br>`Тип.Имя.Право[Поле1]` — снять одну строку | Снять ограничение, право оставить |
| `add-template` | `Имя(Параметры): условие` | Добавить шаблон ограничения |
@@ -85,20 +85,8 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -Rol
`remove-rights` и `deny-rights` задевают больше перечисленного: уходят и права, которым снятое
нужно (сняли `Read` — уйдут `Update`, `View`, `Edit`). Снятое каскадом перечисляется в выводе.
Роль хранит только то, что отличается от её умолчаний, — всё совпавшее навык не пишет и говорит
об этом:
| Где | Что имеет смысл |
|-----|-----------------|
| объект верхнего уровня, `setForNewObjects=false` (умолчание) | выдача прав; запрет бессмыслен |
| объект верхнего уровня, `setForNewObjects=true` | запрет; выдача бессмысленна |
| реквизит, ТЧ, измерение, ресурс, `setForAttributesByDefault=true` (умолчание) | запрет: права наследуются от объекта |
| они же при `setForAttributesByDefault=false` | и выдача, и запрет |
Запрет тянет за собой права, которым запрещённое нужно: `View=false` у реквизита уносит `Edit`.
Тип или имя права вне допустимого списка — отказ: файл не меняется, ошибки печатаются все разом.
Полные таблицы «тип → права» и виды вложенности — в справке `/role-compile`.
Ошибка в значении — отказ до записи, файл не меняется. Полные таблицы «тип → права» и виды
вложенности — в справке `/role-compile`.
## RLS
@@ -112,8 +100,8 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -Rol
... -Operation set-rls -Value "Catalog.Товары.Read[Ссылка, Код, Наименование]: "
```
Строка с тем же набором полей заменяется, с другим — добавляется.
Ограничение на невыданное право — ошибка: платформа такое молча игнорирует.
Строка с тем же набором полей заменяется, с другим — добавляется. Право должно быть уже выдано:
ограничение без права платформа игнорирует, поэтому навык откажет.
Ссылка на шаблон — `#ИмяШаблона("")`; `&` в условиях экранируется автоматически.
@@ -1,4 +1,4 @@
# role-edit v1.4 — Edit existing 1C role rights in place
# role-edit v1.5 — Edit existing 1C role rights in place
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -2360,6 +2360,7 @@ foreach ($note in $script:notes) { Write-Host $note }
Write-Host " Added: $($script:addCount), Removed: $($script:removeCount), Modified: $($script:modifyCount)"
if ($script:droppedByDefault.Count -gt 0) {
[Console]::Error.WriteLine("[role-edit] Не записаны права, совпадающие с умолчанием роли (платформа их не хранит): $($script:droppedByDefault -join ', ')")
[Console]::Error.WriteLine(" Запрет хранится у реквизитов и табличных частей (они наследуют права объекта) либо в роли с setForNewObjects=true; выдача прав — наоборот.")
}
if (-not $NoValidate) {
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# role-edit v1.4 — Edit existing 1C role rights in place
# role-edit v1.5 — Edit existing 1C role rights in place
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -2284,6 +2284,8 @@ def main():
if ed.dropped_by_default:
print("[role-edit] Не записаны права, совпадающие с умолчанием роли "
f"(платформа их не хранит): {', '.join(ed.dropped_by_default)}", file=sys.stderr)
print(" Запрет хранится у реквизитов и табличных частей (они наследуют права объекта) "
"либо в роли с setForNewObjects=true; выдача прав — наоборот.", file=sys.stderr)
if not args.NoValidate:
validate_script = os.path.normpath(os.path.join(