mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-20 00:45:54 +03:00
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:
co-authored by
Claude Opus 5
parent
9fcf7329ba
commit
e8c92362d5
@@ -64,9 +64,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-compile.ps1" -
|
|||||||
|
|
||||||
### Сервисы
|
### Сервисы
|
||||||
|
|
||||||
Платформа проверяет право на **вложенном объекте** сервиса — методе шаблона URL, операции, канале. Права на сервис целиком не существует.
|
Право живёт на **вложенном объекте** сервиса — методе шаблона URL, операции, канале; на сервисе целиком его не бывает. Весь сервис — короткая запись, навык раскроет её по метаданным в `OutputDir`:
|
||||||
|
|
||||||
Весь сервис — короткая запись, навык раскроет её по метаданным сервиса в `OutputDir`:
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"objects": ["HTTPService.ЭДО: Use"]
|
"objects": ["HTTPService.ЭДО: Use"]
|
||||||
@@ -119,21 +117,17 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-compile.ps1" -
|
|||||||
|
|
||||||
## Что можно писать в `objects`
|
## Что можно писать в `objects`
|
||||||
|
|
||||||
Права имеют 27 типов объектов; тип или имя права вне списка — ошибка: роль не создаётся, файлы не пишутся, `Configuration.xml` не меняется. Права нельзя назначить на `Enum`, `CommonModule`, `DefinedType`, `CommonPicture`, `CommonTemplate`, `Language`, `FunctionalOption`, `EventSubscription`, `ScheduledJob`, `StyleItem`, `SettingsStorage` и подобные — в дереве редактора ролей их нет.
|
Прав не бывает у `Enum`, `CommonModule`, `DefinedType`, `CommonPicture`, `CommonTemplate`, `Language`, `FunctionalOption`, `EventSubscription`, `ScheduledJob`, `StyleItem`, `SettingsStorage` и подобных — в дереве редактора ролей их нет. Ошибка в описании — отказ до записи: файлы не создаются, `Configuration.xml` не меняется.
|
||||||
|
|
||||||
Права на части объекта задаются точечным путём: `Catalog.Контрагенты.Attribute.ИНН: View, Edit`, `WebService.Обмен.Operation.Загрузить: Use`, `HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use`.
|
Права на части объекта задаются точечным путём: `Catalog.Контрагенты.Attribute.ИНН: View, Edit`, `WebService.Обмен.Operation.Загрузить: Use`, `HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use`.
|
||||||
|
|
||||||
Роль хранит только то, что отличается от её умолчаний, — всё совпавшее навык не пишет и говорит
|
Реквизиты, табличные части, измерения и ресурсы наследуют права своего объекта — им задают
|
||||||
об этом. При умолчаниях (`setForNewObjects: false`, `setForAttributesByDefault: true`) это значит:
|
запрет, чтобы закрыть унаследованное:
|
||||||
объектам верхнего уровня права выдают, а реквизитам, ТЧ, измерениям и ресурсам — только
|
|
||||||
запрещают, потому что те наследуют права своего объекта:
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{"name": "Catalog.Товары.Attribute.Цена", "rights": {"View": false}}
|
{"name": "Catalog.Товары.Attribute.Цена", "rights": {"View": false}}
|
||||||
```
|
```
|
||||||
|
|
||||||
Запрет тянет за собой права, которым запрещённое нужно: `View: false` у реквизита уносит `Edit`.
|
|
||||||
|
|
||||||
Роль расширения, включённая в основные (`DefaultRoles`), прав на заимствованные объекты давать не может — платформа это запрещает. Такие права выноси в отдельную роль вне основных.
|
Роль расширения, включённая в основные (`DefaultRoles`), прав на заимствованные объекты давать не может — платформа это запрещает. Такие права выноси в отдельную роль вне основных.
|
||||||
|
|
||||||
Полные таблицы «тип → права», виды вложенности (включая внешние источники данных), список типов без прав, таблицы пресетов и дополнительные примеры — в `dsl-reference.md`.
|
Полные таблицы «тип → права», виды вложенности (включая внешние источники данных), список типов без прав, таблицы пресетов и дополнительные примеры — в `dsl-reference.md`.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# role-compile v1.43 — Compile 1C role from JSON
|
# role-compile v1.44 — Compile 1C role from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -1804,6 +1804,7 @@ Write-Host " Rights: $rightsPath"
|
|||||||
Write-Host " Objects: $($parsedObjects.Count), Rights: $totalRights, Templates: $templateCount"
|
Write-Host " Objects: $($parsedObjects.Count), Rights: $totalRights, Templates: $templateCount"
|
||||||
if ($droppedByDefault.Count -gt 0) {
|
if ($droppedByDefault.Count -gt 0) {
|
||||||
[Console]::Error.WriteLine("[role-compile] Не записаны права, совпадающие с умолчанием роли (платформа их не хранит): $($droppedByDefault -join ', ')")
|
[Console]::Error.WriteLine("[role-compile] Не записаны права, совпадающие с умолчанием роли (платформа их не хранит): $($droppedByDefault -join ', ')")
|
||||||
|
[Console]::Error.WriteLine(" Запрет хранится у реквизитов и табличных частей (они наследуют права объекта) либо в роли с setForNewObjects=true; выдача прав — наоборот.")
|
||||||
}
|
}
|
||||||
foreach ($note in $closureNotes) { Write-Host $note }
|
foreach ($note in $closureNotes) { Write-Host $note }
|
||||||
switch ($regResult) {
|
switch ($regResult) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# role-compile v1.43 — Compile 1C role from JSON
|
# role-compile v1.44 — Compile 1C role from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -1859,6 +1859,8 @@ def main():
|
|||||||
if dropped_by_default:
|
if dropped_by_default:
|
||||||
print("[role-compile] Не записаны права, совпадающие с умолчанием роли "
|
print("[role-compile] Не записаны права, совпадающие с умолчанием роли "
|
||||||
f"(платформа их не хранит): {', '.join(dropped_by_default)}", file=sys.stderr)
|
f"(платформа их не хранит): {', '.join(dropped_by_default)}", file=sys.stderr)
|
||||||
|
print(" Запрет хранится у реквизитов и табличных частей (они наследуют права объекта) "
|
||||||
|
"либо в роли с setForNewObjects=true; выдача прав — наоборот.", file=sys.stderr)
|
||||||
for note in closure_notes:
|
for note in closure_notes:
|
||||||
print(note)
|
print(note)
|
||||||
if reg_result == 'added':
|
if reg_result == 'added':
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -Rol
|
|||||||
| `add-rights` | `Тип.Имя: Право1, Право2` или `Тип.Имя: @пресет` | Добавить права, прежние сохранить |
|
| `add-rights` | `Тип.Имя: Право1, Право2` или `Тип.Имя: @пресет` | Добавить права, прежние сохранить |
|
||||||
| `set-rights` | то же | Заменить набор прав объекта целиком |
|
| `set-rights` | то же | Заменить набор прав объекта целиком |
|
||||||
| `remove-rights` | `Тип.Имя: Право1, Право2` — снять права<br>`Тип.Имя` — удалить объект целиком | Снять права |
|
| `remove-rights` | `Тип.Имя: Право1, Право2` — снять права<br>`Тип.Имя` — удалить объект целиком | Снять права |
|
||||||
| `deny-rights` | `Тип.Имя: Право1, Право2` | Запретить права явно |
|
| `deny-rights` | `Тип.Имя: Право1, Право2` | Закрыть реквизит или ТЧ, которые иначе наследуют права объекта |
|
||||||
| `set-rls` | `Тип.Имя.Право: условие`<br>`Тип.Имя.Право[Поле1, Поле2]: условие` | Ограничение доступа к данным |
|
| `set-rls` | `Тип.Имя.Право: условие`<br>`Тип.Имя.Право[Поле1, Поле2]: условие` | Ограничение доступа к данным |
|
||||||
| `remove-rls` | `Тип.Имя.Право` — снять все<br>`Тип.Имя.Право[Поле1]` — снять одну строку | Снять ограничение, право оставить |
|
| `remove-rls` | `Тип.Имя.Право` — снять все<br>`Тип.Имя.Право[Поле1]` — снять одну строку | Снять ограничение, право оставить |
|
||||||
| `add-template` | `Имя(Параметры): условие` | Добавить шаблон ограничения |
|
| `add-template` | `Имя(Параметры): условие` | Добавить шаблон ограничения |
|
||||||
@@ -85,20 +85,8 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -Rol
|
|||||||
`remove-rights` и `deny-rights` задевают больше перечисленного: уходят и права, которым снятое
|
`remove-rights` и `deny-rights` задевают больше перечисленного: уходят и права, которым снятое
|
||||||
нужно (сняли `Read` — уйдут `Update`, `View`, `Edit`). Снятое каскадом перечисляется в выводе.
|
нужно (сняли `Read` — уйдут `Update`, `View`, `Edit`). Снятое каскадом перечисляется в выводе.
|
||||||
|
|
||||||
Роль хранит только то, что отличается от её умолчаний, — всё совпавшее навык не пишет и говорит
|
Ошибка в значении — отказ до записи, файл не меняется. Полные таблицы «тип → права» и виды
|
||||||
об этом:
|
вложенности — в справке `/role-compile`.
|
||||||
|
|
||||||
| Где | Что имеет смысл |
|
|
||||||
|-----|-----------------|
|
|
||||||
| объект верхнего уровня, `setForNewObjects=false` (умолчание) | выдача прав; запрет бессмыслен |
|
|
||||||
| объект верхнего уровня, `setForNewObjects=true` | запрет; выдача бессмысленна |
|
|
||||||
| реквизит, ТЧ, измерение, ресурс, `setForAttributesByDefault=true` (умолчание) | запрет: права наследуются от объекта |
|
|
||||||
| они же при `setForAttributesByDefault=false` | и выдача, и запрет |
|
|
||||||
|
|
||||||
Запрет тянет за собой права, которым запрещённое нужно: `View=false` у реквизита уносит `Edit`.
|
|
||||||
|
|
||||||
Тип или имя права вне допустимого списка — отказ: файл не меняется, ошибки печатаются все разом.
|
|
||||||
Полные таблицы «тип → права» и виды вложенности — в справке `/role-compile`.
|
|
||||||
|
|
||||||
## RLS
|
## RLS
|
||||||
|
|
||||||
@@ -112,8 +100,8 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -Rol
|
|||||||
... -Operation set-rls -Value "Catalog.Товары.Read[Ссылка, Код, Наименование]: "
|
... -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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -2360,6 +2360,7 @@ foreach ($note in $script:notes) { Write-Host $note }
|
|||||||
Write-Host " Added: $($script:addCount), Removed: $($script:removeCount), Modified: $($script:modifyCount)"
|
Write-Host " Added: $($script:addCount), Removed: $($script:removeCount), Modified: $($script:modifyCount)"
|
||||||
if ($script:droppedByDefault.Count -gt 0) {
|
if ($script:droppedByDefault.Count -gt 0) {
|
||||||
[Console]::Error.WriteLine("[role-edit] Не записаны права, совпадающие с умолчанием роли (платформа их не хранит): $($script:droppedByDefault -join ', ')")
|
[Console]::Error.WriteLine("[role-edit] Не записаны права, совпадающие с умолчанием роли (платформа их не хранит): $($script:droppedByDefault -join ', ')")
|
||||||
|
[Console]::Error.WriteLine(" Запрет хранится у реквизитов и табличных частей (они наследуют права объекта) либо в роли с setForNewObjects=true; выдача прав — наоборот.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not $NoValidate) {
|
if (-not $NoValidate) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -2284,6 +2284,8 @@ def main():
|
|||||||
if ed.dropped_by_default:
|
if ed.dropped_by_default:
|
||||||
print("[role-edit] Не записаны права, совпадающие с умолчанием роли "
|
print("[role-edit] Не записаны права, совпадающие с умолчанием роли "
|
||||||
f"(платформа их не хранит): {', '.join(ed.dropped_by_default)}", file=sys.stderr)
|
f"(платформа их не хранит): {', '.join(ed.dropped_by_default)}", file=sys.stderr)
|
||||||
|
print(" Запрет хранится у реквизитов и табличных частей (они наследуют права объекта) "
|
||||||
|
"либо в роли с setForNewObjects=true; выдача прав — наоборот.", file=sys.stderr)
|
||||||
|
|
||||||
if not args.NoValidate:
|
if not args.NoValidate:
|
||||||
validate_script = os.path.normpath(os.path.join(
|
validate_script = os.path.normpath(os.path.join(
|
||||||
|
|||||||
Reference in New Issue
Block a user