Repository navigation
Let admin components run administration flows and lifecycle actions - #141
Merged
brionmario merged 1 commit intoOct 28, 2026
Merged
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
🔀 Cross-SDK feature parity, ports raisedThis pull request is labelled Ports (DO NOT EDIT)
3 of 3 sibling SDKs accounted for. Every sibling SDK is accounted for. The contract is in the SDK development specification. |
5 of 12 tasks
The admin components called the management API directly, so an app that cleans up runtime state through administration flows (revoking grants and ending sessions) could not use them, and they had no way to suspend, unsuspend or unlock an identity. - `administrationMode` prop (default `native`) on UserDetails, GroupMembers, RoleAssignments and ApplicationDetails, passed to the delete, member removal, assignment removal and secret regeneration calls. - `lifecycleActions` prop on UserDetails, AgentDetails and ApplicationDetails. When on, the component reads the configured flows and offers only the actions the identity's status allows and whose flow is configured. Suspend and unsuspend confirm inline, a suspension of a user or agent takes an optional operator note, and unlock runs straight away. The Base variants and custom renders get `lifecycleActions`, `onLifecycleAction` and `isRunningLifecycleAction`. - The access status is typed on users and agents (`AccessStatus`) and shown as a translated label. - Core: `getAccountLifecycleActions`, `runAccountLifecycleAction` and `AccountLifecycleFlowConfigKey`, shared by React and Vue; new strings in every bundled locale. - React and Vue ports, with tests, and playground controls for the UserDetails story. Signed-off-by: Brion <info@brionmario.com>
brionmario
force-pushed
the
feat-admin-components-flow-mode
branch
from
October 28, 2026 09:04
9d1e4ba to
083ff27
Compare
This was referenced Oct 28, 2026
Member
Author
|
rajithacharith
approved these changes
Oct 28, 2026
6 of 12 tasks
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.
Purpose
The admin components call the management API directly. An app that cleans up runtime state through the server's administration flows (revoking grants and ending sessions before a record changes), such as the ThunderID Admin App, could not use them. They also had no way to suspend, unsuspend or unlock an identity, which only work through flows.
Approach
administrationMode(default'native') onUserDetails,GroupMembers,RoleAssignmentsandApplicationDetails. It is passed to the operations that already accept it: user deletion, group member removal, role assignment removal, and application deletion and client secret regeneration.AgentDetailshas no such prop becausedeleteAgenthas no flow.lifecycleActions(defaultfalse) onUserDetails,AgentDetailsandApplicationDetails. When it is on:/server-config/flow,/flows). It reads them only then.ACTIVE→ suspend;LOCKED→ unlock, suspend;SUSPENDED→ unsuspend) whose flow is configured. Applications are never locked.admin.common.lifecycle.load_error, and a failed action showsadmin.common.lifecycle.error.lifecycleActions,onLifecycleActionandisRunningLifecycleAction. Lifecycle actions change only runtime state, so they apply to read-only records too.@thunderid/javascript, re-exported through browser, react and vue):AccessStatusmodel onManagedUserandAgentAccountLifecycleAction,AccountLifecycleSubjectKindandAccountLifecycleFlowConfigKeygetAccountLifecycleActions(kind, status, configuredFlows)runAccountLifecycleAction({action, kind, subject, operatorNote}), which dispatches to the existingsuspendUser,unlockAgentand similar functions so each keeps its own error codesadmin.common.status.*,admin.common.lifecycle.*andadmin.common.columns.statusstrings in every bundled localeUserDetailsstories gainlifecycleActions,statusandadministrationModecontrols, plus "Suspended" and "Live through administration flows" stories.Known limit: the Next.js/Nuxt management relay doesn't forward
/flow/execute, soadministrationMode: 'flow'and the lifecycle actions don't work through the relay yet. The same is true of the flow-mode API functions released earlier. Opening the relay to flow execution needs its own security review, so it is out of scope here.Related Issues
Related PRs
Checklist
getAccountLifecycleActionsandrunAccountLifecycleAction(17), React and Vue admin components (10 each)breaking changelabel added.parity/prs-raisedorparity/prs-not-neededadded.parity/prs-raised, the port links are posted as a reply on the parity check's comment.Security checks