diff --git a/.claude/skills/role-compile/SKILL.md b/.claude/skills/role-compile/SKILL.md index a11995087..67ba38743 100644 --- a/.claude/skills/role-compile/SKILL.md +++ b/.claude/skills/role-compile/SKILL.md @@ -60,6 +60,12 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-compile.ps1" - `@` обязателен в shorthand. В объектной форме — `"preset": "view"` без `@`. +### Зависимые права + +Набор прав дополняется до замыкания: `Edit` тянет `Read`, `Update`, `View`; интерактивные права — +свой базовый набор; `View` у обработки и отчёта — `Use`. Дописанное перечисляется в выводе. Так же +поступает сама платформа при загрузке, поэтому без этого файл роли и база расходятся. + ### Сервисы Платформа проверяет право на **вложенном объекте** сервиса — методе шаблона URL, операции, канале. Права на сервис целиком не существует. diff --git a/.claude/skills/role-compile/scripts/role-compile.ps1 b/.claude/skills/role-compile/scripts/role-compile.ps1 index 13268eeb4..6954b57bd 100644 --- a/.claude/skills/role-compile/scripts/role-compile.ps1 +++ b/.claude/skills/role-compile/scripts/role-compile.ps1 @@ -1,4 +1,4 @@ -# role-compile v1.38 — Compile 1C role from JSON +# role-compile v1.39 — Compile 1C role from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( @@ -833,6 +833,112 @@ function Sort-ObjectsByUuid { return $result } +# --- 4b. Зависимости прав (замерено на платформе) --- +# Платформа при загрузке сама доводит набор до замыкания: выдал Edit — получил ещё +# Read, Update и View. Пишем замыкание сразу, иначе файл и база расходятся. +# Таблица общая для типов; исключения — там, где у типа своя механика (обработка и отчёт +# держатся на Use, план счетов не тянет Read под историю данных). +$script:rightDeps = @{ + "Delete" = @("Read") + "Edit" = @("Read","Update","View") + "EditDataHistoryVersionComment" = @("Read","ReadDataHistory","UpdateDataHistoryVersionComment","View") + "Execute" = @("Read","Update") + "InputByString" = @("Read","View") + "Insert" = @("Read") + "InteractiveActivate" = @("Read","Update") + "InteractiveChangeOfPosted" = @("Edit","Read","Update","View") + "InteractiveClearDeletionMark" = @("Edit","Read","Update","View") + "InteractiveClearDeletionMarkPredefinedData" = @("Edit","InteractiveClearDeletionMark","Read","Update","View") + "InteractiveDelete" = @("Delete","Edit","Read","Update","View") + "InteractiveDeleteMarked" = @("Delete","Edit","Read","Update","View") + "InteractiveDeleteMarkedPredefinedData" = @("Delete","Edit","InteractiveDeleteMarked","Read","Update","View") + "InteractiveDeletePredefinedData" = @("Delete","Edit","InteractiveDelete","Read","Update","View") + "InteractiveExecute" = @("Execute","Read","Update") + "InteractiveInsert" = @("Edit","Insert","Read","Update","View") + "InteractivePosting" = @("Edit","Posting","Read","Update","View") + "InteractivePostingRegular" = @("Edit","InteractivePosting","Posting","Read","Update","View") + "InteractiveSetDeletionMark" = @("Edit","Read","Update","View") + "InteractiveSetDeletionMarkPredefinedData" = @("Edit","InteractiveSetDeletionMark","Read","Update","View") + "InteractiveStart" = @("Read","Start","Update") + "InteractiveUndoPosting" = @("Edit","Read","UndoPosting","Update","View") + "Posting" = @("Read","Update") + "ReadDataHistory" = @("Read") + "ReadDataHistoryOfMissingData" = @("Read","ReadDataHistory") + "Start" = @("Read","Update") + "SwitchToDataHistoryVersion" = @("Read","View") + "UndoPosting" = @("Read","Update") + "Update" = @("Read") + "UpdateDataHistory" = @("Read","ReadDataHistory") + "UpdateDataHistoryOfMissingData" = @("Read","ReadDataHistory","ReadDataHistoryOfMissingData","UpdateDataHistory") + "UpdateDataHistoryVersionComment" = @("Read","ReadDataHistory") + "View" = @("Read") + "ViewDataHistory" = @("Read","ReadDataHistory","View") +} + +$script:rightDepsByType = @{ + "ChartOfAccounts" = @{ + "ReadDataHistory" = @() + "ReadDataHistoryOfMissingData" = @("ReadDataHistory") + "UpdateDataHistory" = @("ReadDataHistory") + "UpdateDataHistoryOfMissingData" = @("ReadDataHistory","ReadDataHistoryOfMissingData","UpdateDataHistory") + "UpdateDataHistoryVersionComment" = @("ReadDataHistory") + } + "DataProcessor" = @{ + "View" = @("Use") + } + "InformationRegister" = @{ + "UpdateDataHistoryOfMissingData" = @("Read","ReadDataHistory","UpdateDataHistory") + } + "Report" = @{ + "View" = @("Use") + } +} + +$script:configurationLegacyDeps = @("AnalyticsSystemClient","MainWindowModeEmbeddedWorkplace","MainWindowModeFullscreenWorkplace","MainWindowModeKiosk","MainWindowModeNormal","MainWindowModeWorkplace") + +# Права конфигурации: до формата 2.19 платформа взводила весь блок режимов окна вместе с +# любым правом, с 2.19 (8.3.26) перестала. Сами права допустимы и там, и там. +$script:configurationLegacyRank = 218 + +# Замыкание набора прав объекта. Возвращает @{ Rights = <итог>; Added = <что дописано> }. +function Close-RightsDependencies { + param([string]$objName, $rights, [int]$formatRank) + $parts = $objName -split '\.' + # У вложенных объектов (реквизит, ТЧ, измерение) зависимостей нет — платформа их не трогает. + if ($parts.Count -ge 3) { return @{ Rights = $rights; Added = @() } } + $objectType = $parts[0] + $allowed = $script:knownRights[$objectType] + if (-not $allowed) { return @{ Rights = $rights; Added = @() } } + $have = [ordered]@{} + foreach ($r in $rights) { if (-not $have.Contains($r.Name)) { $have[$r.Name] = $r } } + $byType = $script:rightDepsByType[$objectType] + $added = @() + $queue = @($have.Keys) + while ($queue.Count -gt 0) { + $name = $queue[0] + $queue = @($queue | Select-Object -Skip 1) + $need = if ($byType -and $byType.Contains($name)) { $byType[$name] } else { $script:rightDeps[$name] } + if (-not $need) { continue } + foreach ($dep in $need) { + if ($have.Contains($dep)) { continue } + if ($allowed -notcontains $dep) { continue } + $have[$dep] = @{ Name = $dep; Value = "true"; Condition = $null } + $added += $dep + $queue += $dep + } + } + if ($objectType -eq 'Configuration' -and $formatRank -le $script:configurationLegacyRank -and $have.Count -gt 0) { + foreach ($dep in $script:configurationLegacyDeps) { + if ($have.Contains($dep)) { continue } + $have[$dep] = @{ Name = $dep; Value = "true"; Condition = $null } + $added += $dep + } + } + $result = @() + foreach ($k in $have.Keys) { $result += ,$have[$k] } + return @{ Rights = $result; Added = $added } +} + # --- 5. Helpers --- function Get-ObjectType { @@ -1332,6 +1438,15 @@ X "`t$sfno" X "`t$sfab" X "`t$irco" +# Замыкание зависимостей: платформа при загрузке всё равно доведёт набор до полного, +# и файл разошёлся бы с базой. Дописанное показываем — права выдаются не молча. +$closureNotes = @() +foreach ($o in $parsedObjects) { + $closed = Close-RightsDependencies -objName $o.Name -rights $o.Rights -formatRank (Get-FormatRank $formatVersion) + $o.Rights = @($closed.Rights) + if ($closed.Added.Count -gt 0) { $closureNotes += " $($o.Name): по зависимости добавлено — $($closed.Added -join ', ')" } +} + # Порядок как у платформы: узлы по uuid объекта, права — по канону типа. Иначе первая же # выгрузка из Конфигуратора переставит их и даст диф, которого никто не делал. $parsedObjects = @(Sort-ObjectsByUuid -objects $parsedObjects -configRoot $resolvedOutputDir) @@ -1606,6 +1721,7 @@ Write-Host " UUID: $uuid" Write-Host " Metadata: $metadataPath" Write-Host " Rights: $rightsPath" Write-Host " Objects: $($parsedObjects.Count), Rights: $totalRights, Templates: $templateCount" +foreach ($note in $closureNotes) { Write-Host $note } switch ($regResult) { "added" { Write-Host " Configuration.xml: $roleName added to ChildObjects" } "already" { Write-Host " Configuration.xml: $roleName already registered" } diff --git a/.claude/skills/role-compile/scripts/role-compile.py b/.claude/skills/role-compile/scripts/role-compile.py index 814905af5..ad9917ea5 100644 --- a/.claude/skills/role-compile/scripts/role-compile.py +++ b/.claude/skills/role-compile/scripts/role-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# role-compile v1.38 — Compile 1C role from JSON +# role-compile v1.39 — Compile 1C role from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -771,6 +771,110 @@ def get_nested_rights(object_type, kind): return NESTED_KIND_RIGHTS.get(kind) +# --- Зависимости прав (замерено на платформе) --- +# Платформа при загрузке сама доводит набор до замыкания: выдал Edit — получил ещё +# Read, Update и View. Пишем замыкание сразу, иначе файл и база расходятся. +# Таблица общая для типов; исключения — там, где у типа своя механика (обработка и отчёт +# держатся на Use, план счетов не тянет Read под историю данных). +RIGHT_DEPS = { + "Delete": ["Read"], + "Edit": ["Read", "Update", "View"], + "EditDataHistoryVersionComment": ["Read", "ReadDataHistory", "UpdateDataHistoryVersionComment", "View"], + "Execute": ["Read", "Update"], + "InputByString": ["Read", "View"], + "Insert": ["Read"], + "InteractiveActivate": ["Read", "Update"], + "InteractiveChangeOfPosted": ["Edit", "Read", "Update", "View"], + "InteractiveClearDeletionMark": ["Edit", "Read", "Update", "View"], + "InteractiveClearDeletionMarkPredefinedData": ["Edit", "InteractiveClearDeletionMark", "Read", "Update", "View"], + "InteractiveDelete": ["Delete", "Edit", "Read", "Update", "View"], + "InteractiveDeleteMarked": ["Delete", "Edit", "Read", "Update", "View"], + "InteractiveDeleteMarkedPredefinedData": ["Delete", "Edit", "InteractiveDeleteMarked", "Read", "Update", "View"], + "InteractiveDeletePredefinedData": ["Delete", "Edit", "InteractiveDelete", "Read", "Update", "View"], + "InteractiveExecute": ["Execute", "Read", "Update"], + "InteractiveInsert": ["Edit", "Insert", "Read", "Update", "View"], + "InteractivePosting": ["Edit", "Posting", "Read", "Update", "View"], + "InteractivePostingRegular": ["Edit", "InteractivePosting", "Posting", "Read", "Update", "View"], + "InteractiveSetDeletionMark": ["Edit", "Read", "Update", "View"], + "InteractiveSetDeletionMarkPredefinedData": ["Edit", "InteractiveSetDeletionMark", "Read", "Update", "View"], + "InteractiveStart": ["Read", "Start", "Update"], + "InteractiveUndoPosting": ["Edit", "Read", "UndoPosting", "Update", "View"], + "Posting": ["Read", "Update"], + "ReadDataHistory": ["Read"], + "ReadDataHistoryOfMissingData": ["Read", "ReadDataHistory"], + "Start": ["Read", "Update"], + "SwitchToDataHistoryVersion": ["Read", "View"], + "UndoPosting": ["Read", "Update"], + "Update": ["Read"], + "UpdateDataHistory": ["Read", "ReadDataHistory"], + "UpdateDataHistoryOfMissingData": ["Read", "ReadDataHistory", "ReadDataHistoryOfMissingData", "UpdateDataHistory"], + "UpdateDataHistoryVersionComment": ["Read", "ReadDataHistory"], + "View": ["Read"], + "ViewDataHistory": ["Read", "ReadDataHistory", "View"], +} + +RIGHT_DEPS_BY_TYPE = { + "ChartOfAccounts": { + "ReadDataHistory": [], + "ReadDataHistoryOfMissingData": ["ReadDataHistory"], + "UpdateDataHistory": ["ReadDataHistory"], + "UpdateDataHistoryOfMissingData": ["ReadDataHistory", "ReadDataHistoryOfMissingData", "UpdateDataHistory"], + "UpdateDataHistoryVersionComment": ["ReadDataHistory"], + }, + "DataProcessor": { + "View": ["Use"], + }, + "InformationRegister": { + "UpdateDataHistoryOfMissingData": ["Read", "ReadDataHistory", "UpdateDataHistory"], + }, + "Report": { + "View": ["Use"], + }, +} + +CONFIGURATION_LEGACY_DEPS = ["AnalyticsSystemClient", "MainWindowModeEmbeddedWorkplace", "MainWindowModeFullscreenWorkplace", "MainWindowModeKiosk", "MainWindowModeNormal", "MainWindowModeWorkplace"] + +# Права конфигурации: до формата 2.19 платформа взводила весь блок режимов окна вместе с +# любым правом, с 2.19 (8.3.26) перестала. Сами права допустимы и там, и там. +CONFIGURATION_LEGACY_RANK = 218 + + +def close_rights_dependencies(object_name, rights, format_rank): + """Замыкание набора прав объекта. Возвращает (итоговые права, что дописано).""" + parts = object_name.split('.') + # У вложенных объектов (реквизит, ТЧ, измерение) зависимостей нет — платформа их не трогает. + if len(parts) >= 3: + return rights, [] + object_type = parts[0] + allowed = KNOWN_RIGHTS.get(object_type) + if not allowed: + return rights, [] + have = {} + for r in rights: + have.setdefault(r['Name'], r) + by_type = RIGHT_DEPS_BY_TYPE.get(object_type, {}) + added = [] + queue = list(have.keys()) + while queue: + name = queue.pop(0) + need = by_type[name] if name in by_type else RIGHT_DEPS.get(name) + if not need: + continue + for dep in need: + if dep in have or dep not in allowed: + continue + have[dep] = {'Name': dep, 'Value': 'true', 'Condition': None} + added.append(dep) + queue.append(dep) + if object_type == 'Configuration' and format_rank <= CONFIGURATION_LEGACY_RANK and have: + for dep in CONFIGURATION_LEGACY_DEPS: + if dep in have: + continue + have[dep] = {'Name': dep, 'Value': 'true', 'Condition': None} + added.append(dep) + return list(have.values()), added + + # --- Канонический порядок прав и узлов (замерено на платформе) --- # Платформа нормализует порядок внутри и порядок самих : # права идут в фиксированном для типа порядке, узлы — по uuid объекта метаданных. @@ -1583,6 +1687,14 @@ def main(): lines.append(f'\t{sfab}') lines.append(f'\t{irco}') + # Замыкание зависимостей: платформа при загрузке всё равно доведёт набор до полного, + # и файл разошёлся бы с базой. Дописанное показываем — права выдаются не молча. + closure_notes = [] + for o in parsed_objects: + o['Rights'], added = close_rights_dependencies(o['Name'], o['Rights'], format_rank(format_version)) + if added: + closure_notes.append(f" {o['Name']}: по зависимости добавлено — {', '.join(added)}") + # Порядок как у платформы: узлы по uuid объекта, права — по канону типа. Иначе первая же # выгрузка из Конфигуратора переставит их и даст диф, которого никто не делал. parsed_objects = sort_objects_by_uuid(parsed_objects, out_dir_resolved) @@ -1658,6 +1770,8 @@ def main(): print(f" Metadata: {metadata_path}") print(f" Rights: {rights_path}") print(f" Objects: {len(parsed_objects)}, Rights: {total_rights}, Templates: {template_count}") + for note in closure_notes: + print(note) if reg_result == 'added': print(f" Configuration.xml: {role_name} added to ChildObjects") elif reg_result == 'already': diff --git a/tests/skills/cases/role-compile/closure-dependencies.json b/tests/skills/cases/role-compile/closure-dependencies.json new file mode 100644 index 000000000..1c5bd05a3 --- /dev/null +++ b/tests/skills/cases/role-compile/closure-dependencies.json @@ -0,0 +1,22 @@ +{ + "name": "Набор прав замыкается по зависимостям, как это сделала бы платформа", + "setup": "fixture:view-preset-fx", + "input": { + "name": "ЗамыканиеПрав", + "synonym": "Замыкание прав", + "objects": [ + "Catalog.Номенклатура: Edit", + "DataProcessor.Загрузка: View" + ] + }, + "validatePath": "Roles/ЗамыканиеПрав", + "expect": { + "files": [ + "Roles/ЗамыканиеПрав/Ext/Rights.xml" + ], + "stdoutContains": [ + "Catalog.Номенклатура: по зависимости добавлено — Read, Update, View", + "DataProcessor.Загрузка: по зависимости добавлено — Use" + ] + } +} diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/Catalogs/Номенклатура.xml b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Catalogs/Номенклатура.xml new file mode 100644 index 000000000..0daed60e9 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Catalogs/Номенклатура.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Номенклатура + + + ru + Номенклатура + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.Номенклатура.StandardAttribute.Description + Catalog.Номенклатура.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/Catalogs/Номенклатура/Ext/ObjectModule.bsl b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Catalogs/Номенклатура/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/Configuration.xml b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Configuration.xml new file mode 100644 index 000000000..66acd2b2a --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Configuration.xml @@ -0,0 +1,254 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + ЗамыканиеПрав + Номенклатура + Загрузка + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/DataProcessors/Загрузка.xml b/tests/skills/cases/role-compile/snapshots/closure-dependencies/DataProcessors/Загрузка.xml new file mode 100644 index 000000000..fa5caaf26 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/closure-dependencies/DataProcessors/Загрузка.xml @@ -0,0 +1,32 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + Загрузка + + + ru + Загрузка + + + + true + + + false + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/DataProcessors/Загрузка/Ext/ManagerModule.bsl b/tests/skills/cases/role-compile/snapshots/closure-dependencies/DataProcessors/Загрузка/Ext/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/DataProcessors/Загрузка/Ext/ObjectModule.bsl b/tests/skills/cases/role-compile/snapshots/closure-dependencies/DataProcessors/Загрузка/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/Languages/Русский.xml b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/Roles/ЗамыканиеПрав.xml b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Roles/ЗамыканиеПрав.xml new file mode 100644 index 000000000..ba9a42cbe --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Roles/ЗамыканиеПрав.xml @@ -0,0 +1,15 @@ + + + + + ЗамыканиеПрав + + + ru + Замыкание прав + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/closure-dependencies/Roles/ЗамыканиеПрав/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Roles/ЗамыканиеПрав/Ext/Rights.xml new file mode 100644 index 000000000..5896a2691 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/closure-dependencies/Roles/ЗамыканиеПрав/Ext/Rights.xml @@ -0,0 +1,36 @@ + + + false + true + false + + Catalog.Номенклатура + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + DataProcessor.Загрузка + + Use + true + + + View + true + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/rights-datahistory-process/Roles/ИсторияДанныхПроцессов/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/rights-datahistory-process/Roles/ИсторияДанныхПроцессов/Ext/Rights.xml index 74109955c..423b49677 100644 --- a/tests/skills/cases/role-compile/snapshots/rights-datahistory-process/Roles/ИсторияДанныхПроцессов/Ext/Rights.xml +++ b/tests/skills/cases/role-compile/snapshots/rights-datahistory-process/Roles/ИсторияДанныхПроцессов/Ext/Rights.xml @@ -9,6 +9,10 @@ Read true + + View + true + UpdateDataHistorySettings true @@ -24,10 +28,34 @@ Read true + + Update + true + + + Delete + true + + + View + true + + + Edit + true + InteractiveDeleteMarked true + + ReadDataHistory + true + + + UpdateDataHistoryVersionComment + true + EditDataHistoryVersionComment true @@ -58,6 +86,22 @@ Read true + + Update + true + + + Delete + true + + + View + true + + + Edit + true + InteractiveDeleteMarked true diff --git a/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Roles/РольАлиасы/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Roles/РольАлиасы/Ext/Rights.xml index a258916bb..aa0a781b9 100644 --- a/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Roles/РольАлиасы/Ext/Rights.xml +++ b/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Roles/РольАлиасы/Ext/Rights.xml @@ -5,6 +5,10 @@ false Report.Сводный + + Use + true + View true