Repository navigation
feat(app-shell): Setup pages for position holders and permission-set assignment - #28310
Merged
Merged
Conversation
…assignment Two Setup component pages under People & organization: pick a position or a permission set from the registry catalog and manage who holds it through the same section the item page renders. The picked item lives in the URL. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qibvdtrVLjcNWmcBoHnP
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qibvdtrVLjcNWmcBoHnP
…s it; count the new de quote pair Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qibvdtrVLjcNWmcBoHnP
…rally at each call site Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qibvdtrVLjcNWmcBoHnP
Contributor
Author
|
domain:ui#3 · os-tesla · session_01L9qibz8HEj53Wx2uphTo2o 维护者速读
席位意见:页面只负责挑选,读写和权限沿用既有区块,不重复判定;侧栏入口拆给服务端卡,本 PR 是 Part of,可直接落地。 席位核对ACCEPT · seat
|
This was referenced Oct 31, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Tesla · project thread
Part of #28241
Clause-②: no
Metadata-protocol: none
维护者速读
ui/packages/app-shell/src/views/setup/CatalogAssignmentPage.tsx(目录读取失败时如实报错而非显示空列表)、ui/packages/app-shell/src/services/builtinComponents.tsx新增的两个注册。pnpm --dir ui exec vitest run packages/app-shell/src/views/setup/,预期全绿;或在本地 Console 打开/apps/setup/component/security/position-holders,左侧列出岗位,点一个看到持有人。What changes
Two Setup component pages, registered in
services/builtinComponents.tsxthe way Packaged Automation and Connector Credentials are:security:position-holders,/apps/setup/component/security/position-holders): the registry'spositioncatalog on the left with a filter; the picked position'sPositionHoldersSectionon the right.security:permission-set-assignment,/apps/setup/component/security/permission-set-assignment): the registry'spermissioncatalog; the picked set'sAssignedUsersSection, in the bordered box the permission set editor draws around it.Both share
views/setup/CatalogAssignmentPage.tsx:?position=/?set=, constants inviews/setup/peopleAssignments.ts), written withreplace, so a shared or refreshed link opens the same item (ui AGENTS.md Convert to monorepo with scoped packages #8).ensureType. The store answers a failed list with an empty one and records the failure on the type's status, so the page readsgetTypeStatusand says "Could not read the positions." with a retry (refresh(type), past the store's failure cooldown), never "No positions".The two sections are imported, not moved or rewritten. Who may add or remove (the section's grant check on
sys_user_position/sys_user_permission_set), the member-only picker and every server refusal stay the section's own. The item pages keep rendering them until N-28 retires those routes.20 new keys under
setupAssignmentsin all ten packs, one contiguous block per pack afterconnectorCredentials. The de pack'snotFoundadds one correctly paired „…“ span, sode-quote-pairing-3876.test.tscounts 102 instead of 101, with the reason line in its ledger comment.Changeset:
.changeset/28241-setup-people-assignment-pages.md,@object-ui/app-shelland@object-ui/i18npatch.Tests
views/setup/PositionHoldersPage.test.tsx(8): lists the catalog and reads no holder before a pick; picking writes?position=and lists holders; add round-trip (create by name, list reads the new holder back); remove round-trip (confirm, delete by row id, list reads it gone and shows the empty line); a delegated administrator's out-of-scope refusal (DELEGATION_SCOPE_VIOLATION, 403) shown as the server's sentence, verbatim; a failed catalog read shown as a failure, then a retry throughrefresh('position'); an unknown?position=; the filter.views/setup/PermissionSetAssignmentPage.test.tsx(5): the same for sets, including that a holder through a position stays when a direct grant is unassigned.views/setup/peopleAssignments.navContribution.test.tsx(4): both refs are registered by the production registration module, addresscomponent/security/…, and mount through the component route.views/setup/peopleAssignments.test.ts(3):catalogEntriesandfilterCatalogEntries.ResourceEditPage.setupCatalog-7611.test.tsxandPermissionMatrixEditor.setupCatalog-7611.test.tsx(the sections still render on the item pages), plus everyPositionHoldersSection*/AssignedUsersSection*test andsetupHoldersGrant-12082.test.tsx.scripts/ablation-replace.mjs, blob back to HEAD): deleting thegetTypeStatus(type) === 'error'branch inCatalogAssignmentPage.tsxturns exactly "says a failed catalog read failed, never "no positions", and retries past the cache" red (1 failed, 7 passed); restored, 8 passed.Acceptance notes
group_people_orgis an empty anchor inpackages/platform-objects/src/apps/setup.app.ts, and the Positions / Permission Sets entries are thenavigationContributionsofpackages/plugins/plugin-security/src/security-plugin.ts(groupgroup_access_control). The two entries (type: 'component',componentRef: 'security:position-holders'and'security:permission-set-assignment', groupgroup_people_org) belong there, outside this ui lane. HencePart of; the card's "both pages reachable from Setup nav" closes when that entry lands. Until then the pages open only by URL.[Security]machine prefix (extractWriteErrorMessage). The tests pin that exact string.everyone,guest) like any other position, as the item pages do; the page adds no rule of its own about them.useMetadataLocale); only the page chrome uses the ten-language packs.Verification
Local, against head
eab3e80a, on a shared box:Tests and type-check
pnpm --dir ui exec vitest run packages/app-shell/src/views/setup/ …item-page and section tests… packages/i18n/→ 119 files, 1691 passed, before the de pin and literal-key fixes; after thempackages/i18n/ packages/app-shell/src/views/setup/→ 105 files, 1577 passed, 13 skipped, exit 0.pnpm --dir ui exec vitest run scripts/__tests__/check-i18n-call-site-keys.test.ts scripts/__tests__/check-i18n-dead-keys.test.ts packages/app-shell/src/views/setup/→ 14 files, 427 passed, exit 0.pnpm --filter @object-ui/i18n run type-check && pnpm --filter @object-ui/app-shell run type-check→ exit 0.pnpm --dir ui check:new-line-citations→ 0 new citations, exit 0.Derived gates (dispatch-gates --commands, 34 lines)
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran LIST→ 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN. The ui scripts suite read 169 files passed, 2 skipped (4901 tests).Generated by Claude Code