@acorex-platform/module-security-management-client 0.0.28 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-jSDkyMMZ.mjs → acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-Wtvhs7VH.mjs} +10 -3
- package/fesm2022/acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-Wtvhs7VH.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-security-management-client-contracts.mjs +2 -0
- package/fesm2022/acorex-platform-module-security-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-security-management-client-index-DOHWBEzM.mjs → acorex-platform-module-security-management-client-index-Dw9MKtB1.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-security-management-client-index-DOHWBEzM.mjs.map → acorex-platform-module-security-management-client-index-Dw9MKtB1.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-security-management-client.mjs +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-module-security-management-client-contracts.d.ts +10 -0
- package/fesm2022/acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-jSDkyMMZ.mjs.map +0 -1
|
@@ -134,6 +134,13 @@ class AXMSecurityManagementFeatureDefinitionProvider {
|
|
|
134
134
|
defaultValue: false,
|
|
135
135
|
type: 'boolean',
|
|
136
136
|
});
|
|
137
|
+
// Self-service account deletion — off unless an edition enables it
|
|
138
|
+
context.addFeature(AXPSecurityManagementFeatureKeys.DeleteAccount, {
|
|
139
|
+
title: `@${i18n}:features.delete-account.title`,
|
|
140
|
+
description: `@${i18n}:features.delete-account.description`,
|
|
141
|
+
defaultValue: false,
|
|
142
|
+
type: 'boolean',
|
|
143
|
+
});
|
|
137
144
|
}
|
|
138
145
|
}
|
|
139
146
|
//#endregion
|
|
@@ -710,7 +717,7 @@ class AXMSecurityManagementModule {
|
|
|
710
717
|
multi: true,
|
|
711
718
|
},
|
|
712
719
|
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return index; }).then((m) => m.AXMRolePermissionsPageComponentProvider)),
|
|
713
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-
|
|
720
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-Dw9MKtB1.mjs').then((m) => m.AXMUserRolesPageComponentProvider)),
|
|
714
721
|
// Provider references (now using tokens)
|
|
715
722
|
{
|
|
716
723
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
@@ -786,7 +793,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
786
793
|
multi: true,
|
|
787
794
|
},
|
|
788
795
|
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return index; }).then((m) => m.AXMRolePermissionsPageComponentProvider)),
|
|
789
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-
|
|
796
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-Dw9MKtB1.mjs').then((m) => m.AXMUserRolesPageComponentProvider)),
|
|
790
797
|
// Provider references (now using tokens)
|
|
791
798
|
{
|
|
792
799
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
@@ -2085,4 +2092,4 @@ var permissionsWidgetColumn_component = /*#__PURE__*/Object.freeze({
|
|
|
2085
2092
|
*/
|
|
2086
2093
|
|
|
2087
2094
|
export { AXMAssignPermissionsCommand as A, AXMDeviceSessionsService as a, AXMPermissionsModule as b, AXMRolePermissionGrantService as c, AXMRolePermissionsPageComponent as d, AXMRolePermissionsPageComponentProvider as e, AXMSecurityManagementModule as f, AXPPermissionsEditorComponent as g, AXPPermissionsWidget as h, AXPPermissionsWidgetColumnComponent as i, AXPPermissionsWidgetEditComponent as j, AXPPermissionsWidgetViewComponent as k, resolvePersistedEntityId as r };
|
|
2088
|
-
//# sourceMappingURL=acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-
|
|
2095
|
+
//# sourceMappingURL=acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-Wtvhs7VH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-Wtvhs7VH.mjs","sources":["../../../../libs/modules/security-management/client/src/lib/features/device-sessions/services/device-sessions.service.ts","../../../../libs/modules/security-management/client/src/lib/context-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget.config.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/widget-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions.module.ts","../../../../libs/modules/security-management/client/src/lib/features/security-evaluator-scope.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-access-state.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-effective-state.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-status.provider.ts","../../../../libs/modules/security-management/client/src/lib/manifest.ts","../../../../libs/modules/security-management/client/src/lib/menu.provider.ts","../../../../libs/modules/security-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/security-management/client/src/lib/security-management.module.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-editor/permissions-editor.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-editor/permissions-editor.component.html","../../../../libs/modules/security-management/client/src/lib/features/permissions/role-permission-grant.service.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/commands/assign-permissions.command.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/resolve-persisted-entity-id.util.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/pages/role-permissions-page/role-permissions-page.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/pages/role-permissions-page/role-permissions-page.component.html","../../../../libs/modules/security-management/client/src/lib/features/permissions/pages/role-permissions-page/role-permissions-page-component.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-view.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-edit.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-column.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/index.ts","../../../../libs/modules/security-management/client/src/acorex-platform-module-security-management-client.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n//#region ---- Device Sessions Service ----\n\n/**\n * Terminates device sessions for the current or specified session.\n * Implementations are provided by connectivity layers (e.g. mock or API).\n */\n@Injectable()\nexport abstract class AXMDeviceSessionsService {\n abstract terminate(id: string): Promise<boolean>;\n\n abstract terminateAllCurrentUserSessions(): Promise<boolean>;\n}\n\n//#endregion\n","import { Injectable } from '@angular/core';\nimport type { AXPContextDefinition, AXPContextDefinitionProvider } from '@acorex-platform/framework-client/core';\nimport { AXM_SECURITY_CONTEXT_DEFINITIONS } from '@acorex-platform/module-security-management-client/contracts';\n\n//#region ---- User context definitions ----\n\n@Injectable()\nexport class AXMSecurityManagementContextDefinitionProvider implements AXPContextDefinitionProvider {\n async items(): Promise<AXPContextDefinition[]> {\n return AXM_SECURITY_CONTEXT_DEFINITIONS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { AXPSecurityManagementFeatureKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Security Management Module Feature Definition Provider.\n * Provides feature definitions for the Security Management module.\n */\nexport class AXMSecurityManagementFeatureDefinitionProvider\n implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n const i18n = RootConfig.config.i18n;\n\n // Manage Roles feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageRoles, {\n title: `@${i18n}:features.manage-roles.title`,\n description: `@${i18n}:features.manage-roles.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Manage Users feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageUsers, {\n title: `@${i18n}:features.manage-users.title`,\n description: `@${i18n}:features.manage-users.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Max Total Users feature (widget configuration)\n context.addFeature(AXPSecurityManagementFeatureKeys.MaxTotalUsers, {\n title: `@${i18n}:features.max-total-users.title`,\n description: `@${i18n}:features.max-total-users.description`,\n defaultValue: 100,\n type: 'number',\n interface: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n placeholder: `@${i18n}:features.max-total-users.title`,\n min: 1,\n max: 10000,\n step: 1,\n },\n },\n });\n\n // Manage Sessions feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageSessions, {\n title: `@${i18n}:features.manage-sessions.title`,\n description: `@${i18n}:features.manage-sessions.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Manage Policies feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManagePolicies, {\n title: `@${i18n}:features.manage-policies.title`,\n description: `@${i18n}:features.manage-policies.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Identity Providers — platform-tenant management only (edition feature on Platform Console)\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageIdentityProviders, {\n title: `@${i18n}:features.manage-identity-providers.title`,\n description: `@${i18n}:features.manage-identity-providers.description`,\n defaultValue: false,\n type: 'boolean',\n });\n\n // Self-service account deletion — off unless an edition enables it\n context.addFeature(AXPSecurityManagementFeatureKeys.DeleteAccount, {\n title: `@${i18n}:features.delete-account.title`,\n description: `@${i18n}:features.delete-account.description`,\n defaultValue: false,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_NAME_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\n\nexport const AXPPermissionsWidget: AXPWidgetConfig = {\n name: \"permissions-editor\",\n title: \"Permissions Editor\",\n description: 'Widget for managing permissions with full editor interface',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: \"fa-light fa-user-shield\",\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n ],\n components: {\n view: {\n component: () => import('./permissions-widget-view.component').then((c) => c.AXPPermissionsWidgetViewComponent),\n },\n edit: {\n component: () => import('./permissions-widget-edit.component').then((c) => c.AXPPermissionsWidgetEditComponent),\n },\n column: {\n component: () => import('./permissions-widget-column.component').then((c) => c.AXPPermissionsWidgetColumnComponent),\n },\n }\n}","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPPermissionsWidget } from './permissions-widget/permissions-widget.config';\n\n//#endregion\n\n//#region ---- Permissions Widgets Provider ----\n\nconst WIDGETS = [AXPPermissionsWidget];\n\n@Injectable()\nexport class AXPPermissionsWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return WIDGETS;\n }\n}\n\n//#endregion\n","import { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { AXPPermissionsWidgetsProvider } from './widget-definition.provider';\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPPermissionsWidgetsProvider, multi: true },\n provideCommandSetups([\n {\n key: 'assign-permissions',\n command: () =>\n import('./commands/assign-permissions.command').then((c) => c.AXMAssignPermissionsCommand),\n },\n ]),\n ],\n})\nexport class AXMPermissionsModule { }\n","import { AXPSessionService } from \"@acorex-platform/framework-client/auth\";\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex-platform/framework-shared/core\";\nimport { inject } from \"@angular/core\";\n\nexport class AXMSecurityManagementEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected sessionService = inject(AXPSessionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('session', {\n currentUser: () => {\n return this.sessionService.user;\n },\n user: () => {\n return this.sessionService.user;\n },\n currentApplication: () => {\n return this.sessionService.application;\n },\n currentTenant: () => {\n return this.sessionService.tenant;\n },\n currentPermissions: () => {\n return this.sessionService.permissions;\n },\n })\n }\n}","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition } from '@acorex-platform/framework-shared/core';\nimport { AXM_USER_ACCESS_STATE_DEFINITION_KEY, AXMUserAccessState } from '@acorex-platform/module-security-management-client/contracts';\n//#endregion\n\n//#region ---- User access state provider ----\n\n/**\n * Sign-in readiness from the authentication subsystem (distinct from account lifecycle / `accountState`).\n * Transitions listed here are the only paths offered in the status UI and validated when executing a status change command.\n */\nexport class AXMUserAccessStateProvider extends AXPStatusProvider {\n readonly key = AXM_USER_ACCESS_STATE_DEFINITION_KEY;\n\n readonly defaultStatus = AXMUserAccessState.Allowed;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.states.allowed',\n description: '@security-management:users.entities.user.access.descriptions.allowed',\n icon: 'fa-light fa-circle-check',\n color: 'success',\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n {\n name: AXMUserAccessState.Blocked,\n title: '@security-management:users.entities.user.access.states.blocked',\n description: '@security-management:users.entities.user.access.descriptions.blocked',\n icon: 'fa-light fa-ban',\n color: 'danger',\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n {\n name: AXMUserAccessState.Expired,\n title: '@security-management:users.entities.user.access.states.expired',\n description: '@security-management:users.entities.user.access.descriptions.expired',\n icon: 'fa-light fa-clock',\n color: 'danger',\n order: 3,\n isInitial: false,\n isFinal: true,\n generateView: false,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXMUserAccessState.Allowed,\n to: AXMUserAccessState.Blocked,\n title: '@security-management:users.entities.user.access.transitions.block-sign-in',\n },\n {\n from: AXMUserAccessState.Allowed,\n to: AXMUserAccessState.Expired,\n title: '@security-management:users.entities.user.access.transitions.require-credential-renewal',\n },\n {\n from: AXMUserAccessState.Blocked,\n to: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.transitions.unblock-sign-in',\n },\n {\n from: AXMUserAccessState.Expired,\n to: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.transitions.restore-after-credential-renewal',\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition } from '@acorex-platform/framework-shared/core';\nimport { AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY, AXMUserEffectiveState } from '@acorex-platform/module-security-management-client/contracts';\n//#endregion\n\n//#region ---- User effective state provider ----\n\n/**\n * Unified operational state for lists, filters, and page chrome (derived from lifecycle + sign-in gate).\n */\nexport class AXMUserEffectiveStateProvider extends AXPStatusProvider {\n readonly key = AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY;\n\n readonly defaultStatus = AXMUserEffectiveState.Active;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXMUserEffectiveState.Pending,\n title: '@security-management:users.entities.user.effective.states.pending',\n description: '@security-management:users.entities.user.effective.descriptions.pending',\n icon: 'fa-light fa-hourglass-half',\n color: 'warning',\n order: 1,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Active,\n title: '@security-management:users.entities.user.effective.states.active',\n description: '@security-management:users.entities.user.effective.descriptions.active',\n icon: 'fa-light fa-circle-check',\n color: 'success',\n order: 2,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.SignInBlocked,\n title: '@security-management:users.entities.user.effective.states.sign-in-blocked',\n description: '@security-management:users.entities.user.effective.descriptions.sign-in-blocked',\n icon: 'fa-light fa-shield-halved',\n color: 'danger',\n order: 3,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.CredentialExpired,\n title: '@security-management:users.entities.user.effective.states.credential-expired',\n description: '@security-management:users.entities.user.effective.descriptions.credential-expired',\n icon: 'fa-light fa-key',\n color: 'danger',\n order: 4,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Suspended,\n title: '@security-management:users.entities.user.effective.states.suspended',\n description: '@security-management:users.entities.user.effective.descriptions.suspended',\n icon: 'fa-light fa-pause-circle',\n color: 'warning',\n order: 5,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Inactive,\n title: '@security-management:users.entities.user.effective.states.inactive',\n description: '@security-management:users.entities.user.effective.descriptions.inactive',\n icon: 'fa-light fa-user-slash',\n color: 'danger',\n order: 6,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Archived,\n title: '@security-management:users.entities.user.effective.states.archived',\n description: '@security-management:users.entities.user.effective.descriptions.archived',\n icon: 'fa-light fa-box-archive',\n color: 'danger',\n order: 7,\n generateView: true,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- User account status provider ----\n\n/**\n * Account-level state for SecurityManagement.User (lifecycle / admin).\n * Sign-in lockout is expressed as `accessState === blocked`, not as `accountState`.\n */\nexport class AXMUserStatusProvider extends AXPStatusProvider {\n readonly key = 'security-management.account-state.user';\n\n readonly defaultStatus = AXPSystemStatusType.Active;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXPSystemStatusType.Pending,\n title: '@security-management:users.entities.user.states.pending',\n description: '@security-management:users.entities.user.account.descriptions.pending',\n icon: 'fa-light fa-envelope-open-text',\n color: 'warning',\n order: 1,\n isInitial: true,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.states.active',\n description: '@security-management:users.entities.user.account.descriptions.active',\n icon: 'fa-light fa-user-check',\n color: 'success',\n order: 1,\n isInitial: false,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Suspended,\n title: '@security-management:users.entities.user.states.suspended',\n description: '@security-management:users.entities.user.account.descriptions.suspended',\n icon: 'fa-light fa-pause-circle',\n color: 'warning',\n order: 5,\n isInitial: false,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.states.inactive',\n description: '@security-management:users.entities.user.account.descriptions.inactive',\n icon: 'fa-light fa-user-slash',\n color: 'danger',\n order: 2,\n isInitial: false,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.states.archived',\n description: '@security-management:users.entities.user.account.descriptions.archived',\n icon: 'fa-light fa-box-archive',\n color: 'danger',\n order: 5,\n isInitial: false,\n isFinal: true,\n generateView: true,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.Pending,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.activate',\n },\n {\n from: AXPSystemStatusType.Pending,\n to: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.transitions.cancel-invitation',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Suspended,\n title: '@security-management:users.entities.user.transitions.suspend',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.restore',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.transitions.disable',\n },\n {\n from: AXPSystemStatusType.Inactive,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.enable',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.transitions.disable',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Inactive,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Pending,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Archived,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.restore-archived',\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Security Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const SecurityManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport {\n AXPAdministrationPermissionKeys,\n AXPSecurityManagementFeatureKeys,\n AXPSecurityManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-security-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const moduleName = RootConfig.module.name;\n\n // Check if Security submenu exists under Administration, create it if not\n const securityMenu = context.find(AXPSecurityManagementMenuKeys.Root);\n if (!securityMenu.exists) {\n // Add Security submenu to Administration group\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n priority: 1,\n text: '@security-management:module.menus.root.title',\n icon: RootConfig.module.icon,\n name: AXPSecurityManagementMenuKeys.Root,\n type: 'menu',\n children: [],\n policy: {\n features: [RootConfig.module.name],\n },\n },\n ]);\n }\n\n // Add menu items under Security submenu\n context.find(AXPSecurityManagementMenuKeys.Root).addItems([\n {\n priority: 9003,\n text: RootConfig.entities.users.titlePlural,\n icon: RootConfig.entities.users.icon,\n name: AXPSecurityManagementMenuKeys.Users,\n path: this.entityService.createPath(moduleName, RootConfig.entities.users.name),\n policy: {\n features: [moduleName],\n permissions: [AXPAdministrationPermissionKeys.MaintainUsersAndRoles],\n },\n },\n {\n priority: 9004,\n text: RootConfig.entities.roles.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.roles.name),\n icon: RootConfig.entities.roles.icon,\n name: AXPSecurityManagementMenuKeys.Roles,\n policy: {\n features: [moduleName],\n permissions: [AXPAdministrationPermissionKeys.MaintainUsersAndRoles],\n },\n },\n {\n priority: 9005,\n text: RootConfig.entities.deviceSessions.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.deviceSessions.name),\n icon: RootConfig.entities.deviceSessions.icon,\n name: AXPSecurityManagementMenuKeys.DeviceSessions,\n policy: {\n features: [moduleName],\n permissions: [AXPAdministrationPermissionKeys.ManageSessions],\n },\n },\n {\n priority: 9007,\n text: RootConfig.entities.identityProvider.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.identityProvider.name),\n icon: RootConfig.entities.identityProvider.icon,\n name: AXPSecurityManagementMenuKeys.IdentityProviders,\n policy: {\n // Platform Console edition only (not on Safetyminder / tenant apps)\n features: [AXPSecurityManagementFeatureKeys.ManageIdentityProviders],\n permissions: [AXPAdministrationPermissionKeys.MaintainPolicies],\n },\n },\n // {\n // priority: 9006,\n // text: RootConfig.entities.policy.titlePlural,\n // path: this.entityService.createPath(moduleName, RootConfig.entities.policy.name),\n // icon: RootConfig.entities.policy.icon,\n // name: AXPSecurityManagementMenuKeys.Policy,\n // policy: {\n // permissions: [AXPAdministrationPermissionKeys.MaintainPolicies],\n // },\n // },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPAdministrationPermissionKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers Administration root + Security & Access section capabilities.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPAdministrationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:administration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, { order: 120 });\n\n context\n .addGroup(\n groups.Administration.SecurityAccess,\n `${G}.administration-security-access.title`,\n `${G}.administration-security-access.description`,\n { parent: groups.Administration.Root, order: 10 },\n )\n .addPermission(keys.Access, `${P}.access.title`, `${P}.access.description`)\n .endPermission()\n .addPermission(\n keys.MaintainUsersAndRoles,\n `${P}.maintain-users-and-roles.title`,\n `${P}.maintain-users-and-roles.description`,\n )\n .endPermission()\n .addPermission(keys.ManageSessions, `${P}.manage-sessions.title`, `${P}.manage-sessions.description`)\n .endPermission()\n .addPermission(keys.MaintainPolicies, `${P}.maintain-policies.title`, `${P}.maintain-policies.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n// TODO: Refactor to generic provider (do it later)\n//\n// Move this logic to a generic AXPEntityCreateSearchCommandProvider in libs/platform/layout/entity.\n// The generic provider should:\n// - Inject AXPEntityDefinitionRegistryService and AXPSessionService\n// - Override search(text) to build commands dynamically from registry\n// - Filter entities: only aggregate roots (commands?.create exists AND !parentKey)\n// - Filter by permission: sessionService.authorize() for both Create and Management\n// Permission convention: `${module}:Permission:${entity.name}.Create` or `.Management`\n// - Use createEntityCommandOptions() with Entity:Create command (same pattern as below)\n// - Register in entity module as AXP_SEARCH_PROVIDER\n// - Remove this and other module-specific search command providers that only add entity-create commands\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-security-user',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.users.name}`,\n entityInfo: { name: RootConfig.entities.users.name, module: RootConfig.module.name, title: RootConfig.entities.users.title },\n titleKey: '@security-management:users.permissions.create.title',\n descriptionKey: '@security-management:users.permissions.create.description',\n icon: RootConfig.entities.users.icon,\n }),\n createEntitySearchCommand({\n id: 'create-security-role',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n entityInfo: { name: RootConfig.entities.roles.name, module: RootConfig.module.name, title: RootConfig.entities.roles.title },\n titleKey: '@security-management:roles.permissions.create.title',\n descriptionKey: '@security-management:roles.permissions.create.description',\n icon: RootConfig.entities.roles.icon,\n }),\n ];\n}\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex-platform/framework-client/common';\nimport {\n AXP_CONTEXT_DEFINITION_PROVIDER,\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXP_FEATURE_DEFINITION_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n provideLazyProvider,\n} from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { AXMSecurityManagementContextDefinitionProvider } from './context-definition.provider';\nimport { AXMSecurityManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMPermissionsModule } from './features/permissions/permissions.module';\nimport { AXMSecurityManagementEvaluatorScopeProvider } from './features/security-evaluator-scope.provider';\nimport { AXMUserAccessStateProvider } from './features/shared/user-access-state.provider';\nimport { AXMUserEffectiveStateProvider } from './features/shared/user-effective-state.provider';\nimport { AXMUserStatusProvider } from './features/shared/user-status.provider';\nimport { SecurityManagementManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\n\n@NgModule({\n imports: [\n AXMPermissionsModule,\n ],\n exports: [],\n declarations: [],\n providers: [\n // Module-specific providers (not part of manifest system)\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMSecurityManagementEvaluatorScopeProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: SecurityManagementManifest,\n multi: true,\n },\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/permissions/pages/role-permissions-page').then(\n (m) => m.AXMRolePermissionsPageComponentProvider,\n ),\n ),\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/user-roles/pages/user-roles-page').then(\n (m) => m.AXMUserRolesPageComponentProvider,\n ),\n ),\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXMSecurityManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserAccessStateProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserEffectiveStateProvider,\n multi: true,\n },\n {\n provide: AXP_CONTEXT_DEFINITION_PROVIDER,\n useClass: AXMSecurityManagementContextDefinitionProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: 'Session:Terminate',\n command: () => import('./commands/terminate-session.command').then((c) => c.AXPTerminateSessionCommand),\n },\n {\n key: 'SecurityManagement:User:SendPasswordResetEmail',\n command: () =>\n import('./commands/send-password-reset-email.command').then((c) => c.AXPSendPasswordResetEmailCommand),\n },\n ]),\n ],\n})\nexport class AXMSecurityManagementModule {}\n","// #region ---------------- Imports ----------------\nimport {\n Component,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n input,\n output,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport {\n AXPPermissionDefinition,\n AXPPermissionDefinitionService,\n AXPPermissionGroupDefinition,\n} from '@acorex-platform/framework-client/auth';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { FormsModule } from '@angular/forms';\nimport { AXCommonModule, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { setupPopupFooterKeyboardShortcuts } from '@acorex-platform/framework-client/core';\nimport { isEmpty, trim } from 'lodash-es';\n// #endregion\n\n// #region ---------------- Types ----------------\n\ninterface MappedPermission extends Omit<AXPPermissionDefinition, 'children'> {\n isSelected: boolean;\n children: MappedPermission[] | null;\n}\n\n/** Right-panel section (optional nested group) or a flat unsectioned block. */\ninterface PermissionPanelSection {\n name: string;\n title: string | null;\n items: MappedPermission[];\n}\n\ninterface PermissionSearchGroupResult {\n group: AXPPermissionGroupDefinition & { badge: string };\n sections: PermissionPanelSection[];\n}\n\n// #endregion\n\n@Component({\n selector: 'axm-permissions-editor',\n templateUrl: './permissions-editor.component.html',\n styleUrl: './permissions-editor.component.css',\n imports: [\n // Angular\n CommonModule,\n FormsModule,\n AXCommonModule,\n // ACoreX\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXTabsModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBadgeModule,\n AXCheckBoxModule,\n AXTooltipModule,\n AXSkeletonModule,\n AXSearchBoxModule,\n AXPStateMessageComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[class]': 'hostClass()',\n '[attr.aria-busy]': 'isEditorLoading() ? \"true\" : null',\n },\n})\nexport class AXPPermissionsEditorComponent extends AXBasePageComponent {\n // #region ---------------- Class Properties ----------------\n /** Service for fetching permission groups and definitions */\n private permissionService = inject(AXPPermissionDefinitionService);\n\n /** Translation service for resolving permission labels during search */\n private translationService = inject(AXTranslationService);\n\n /** Currently selected permission group */\n protected selectedGroup = signal<AXPPermissionGroupDefinition | null>(null);\n\n /** Current search query */\n protected searchQuery = signal('');\n\n /** All available permission groups */\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n /** Initial permissions to be selected - exposed as signal input */\n initialPermissions = input<string[]>([]);\n\n /** Whether the editor is in read-only mode */\n readOnly = input<boolean>(false);\n\n /** Whether popup footer actions (Cancel / Select) are shown */\n showActions = input<boolean>(false);\n\n /** When true, fills the host (detail page) without the dialog max-height cap. */\n fillHeight = input<boolean>(false);\n\n protected readonly hostClass = computed(() =>\n this.fillHeight()\n ? 'axm-permissions-editor axm-permissions-editor--fill-height flex h-full min-h-0 flex-col overflow-hidden'\n : 'axm-permissions-editor axm-permissions-editor--dialog flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden p-4 gap-3',\n );\n\n /** List of selected permission names */\n protected selectedPermissions = signal<string[]>([]);\n\n /** Event emitted when permissions selection changes */\n permissionsChanged = output<string[]>();\n\n /** Event emitted when permissions are applied/selected */\n permissionsSelected = output<string[]>();\n\n /** Whether permission groups are being loaded */\n protected isEditorLoading = signal(true);\n // #endregion\n\n // #region ---------------- Constructor ----------------\n\n constructor() {\n super();\n setupPopupFooterKeyboardShortcuts(\n () => {\n if (!this.isShowActions()) {\n return [];\n }\n\n return [\n {\n title: '@general:actions.cancel.title',\n command: 'cancel',\n handler: () => this.handleCancelClick(),\n },\n {\n title: '@general:actions.select.title',\n command: 'select',\n handler: () => this.handleSelectClick(),\n },\n ];\n },\n { id: 'permissions-editor-popup', when: () => this.isShowActions() },\n );\n }\n\n // #endregion\n\n // #region ---------------- Computed Properties ----------------\n\n /**\n * Reads a signal input or a plain value assigned by AXPopupService data binding.\n */\n private readBoundValue<T>(value: unknown, fallback: T): T {\n if (typeof value === 'function') {\n return (value as () => T)();\n }\n\n return (value ?? fallback) as T;\n }\n\n /** Whether popup footer actions are visible (supports popup data and input binding). */\n protected isShowActions(): boolean {\n return this.readBoundValue(this.showActions, false);\n }\n\n /** Whether the editor is read-only (supports popup data and input binding). */\n protected isReadOnlyMode(): boolean {\n return this.readBoundValue(this.readOnly, false);\n }\n\n /** Initial permission selection (supports popup data and input binding). */\n protected getInitialPermissions(): string[] {\n return this.readBoundValue(this.initialPermissions, []);\n }\n\n /**\n * Recursively maps permissions to include selection state and children.\n * Sorted alphabetically by translated title.\n */\n private mapPermissions(items: AXPPermissionDefinition[]): MappedPermission[] {\n const mapped = (items || []).map((item) => {\n const children = item.children;\n return {\n ...item,\n isSelected: this.isSelected(item.name),\n children: children?.length ? this.mapPermissions(children) : null,\n };\n });\n return mapped.sort((a, b) =>\n this.compareByTitle(a.title, b.title, a.name, b.name),\n );\n }\n\n /**\n * Locale-aware label comparison using the resolved translation when available.\n */\n private compareByTitle(\n titleA: string,\n titleB: string,\n tieBreakerA = titleA,\n tieBreakerB = titleB,\n ): number {\n const labelA = (\n this.translationService.translateSync(titleA) || titleA\n ).toLocaleLowerCase();\n const labelB = (\n this.translationService.translateSync(titleB) || titleB\n ).toLocaleLowerCase();\n const byLabel = labelA.localeCompare(labelB);\n if (byLabel !== 0) {\n return byLabel;\n }\n return tieBreakerA.localeCompare(tieBreakerB);\n }\n\n /**\n * Computed: Left-nav roots only (groups without a parent), sorted by title.\n */\n protected groupsWithBadge = computed(() => {\n const roots = this.groups().filter((group) => !group.parent);\n const result = roots.map((group) => ({\n ...group,\n badge: this.getBadge(group) || '',\n }));\n return result.sort((a, b) =>\n this.compareByTitle(a.title, b.title, a.name, b.name),\n );\n });\n\n /**\n * Computed: Right-panel sections for the selected root (or one flat block).\n */\n protected selectedSections = computed((): PermissionPanelSection[] => {\n const selected = this.selectedGroup();\n if (!selected) {\n return [];\n }\n return this.buildPanelSections(selected, null);\n });\n\n /** Sidebar group placeholders for the loading skeleton */\n protected readonly groupSkeletonPlaceholders = computed(() => [\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n ]);\n\n /** Permission group placeholders (parent + child rows) for the loading skeleton */\n protected readonly permissionGroupSkeletonPlaceholders = computed(() => [\n { childCount: 4 },\n { childCount: 4 },\n { childCount: 2 },\n { childCount: 4 },\n ]);\n\n /** Child row placeholders for a permission group skeleton */\n protected readonly childSkeletonPlaceholders = (count: number) =>\n Array.from({ length: count }, (_, index) => index);\n\n /** Whether the user is actively searching permissions */\n protected isSearchActive = computed(() => !isEmpty(trim(this.searchQuery())));\n\n /** Grouped search results across all root permission groups */\n protected searchResultsGrouped = computed(\n (): PermissionSearchGroupResult[] => {\n const normalizedQuery = trim(this.searchQuery()).toLowerCase();\n if (!normalizedQuery) {\n return [];\n }\n\n return this.groupsWithBadge()\n .map((group) => ({\n group,\n sections: this.buildPanelSections(group, normalizedQuery),\n }))\n .filter((result) => !isEmpty(result.sections));\n },\n );\n\n /** Whether the active search returned any permission groups */\n protected hasSearchResults = computed(\n () => !isEmpty(this.searchResultsGrouped()),\n );\n // #endregion\n\n // #region ---------------- Utility Methods ----------------\n /**\n * Drops empty roots/sections after session feature filtering in\n * {@link AXPPermissionDefinitionService}. Keeps a root only when it or a child\n * section still has at least one permission.\n */\n private filterGroupsByEnabledModules(\n groups: AXPPermissionGroupDefinition[],\n ): AXPPermissionGroupDefinition[] {\n const withPermissions = new Set(\n groups.filter((group) => (group.permissions?.length ?? 0) > 0).map((group) => group.name),\n );\n const parentsOfKept = new Set(\n groups\n .filter((group) => withPermissions.has(group.name) && group.parent)\n .map((group) => group.parent as string),\n );\n return groups.filter(\n (group) => withPermissions.has(group.name) || parentsOfKept.has(group.name),\n );\n }\n\n /** Permission keys still visible after edition/feature filtering. */\n private collectAvailablePermissionNames(groups: AXPPermissionGroupDefinition[]): Set<string> {\n const names = new Set<string>();\n const walk = (permissions: AXPPermissionDefinition[]) => {\n for (const permission of permissions) {\n names.add(permission.name);\n if (permission.children?.length) {\n walk(permission.children);\n }\n }\n };\n for (const group of groups) {\n walk(group.permissions ?? []);\n }\n return names;\n }\n\n /**\n * Child section groups under a root, sorted alphabetically by translated title.\n */\n private getChildSections(\n root: AXPPermissionGroupDefinition,\n ): AXPPermissionGroupDefinition[] {\n return this.groups()\n .filter((group) => group.parent === root.name)\n .sort((a, b) => this.compareByTitle(a.title, b.title, a.name, b.name));\n }\n\n /**\n * Builds right-panel sections for a root. When `normalizedQuery` is set, keeps\n * only matching permissions/sections (and sections whose title matches).\n */\n private buildPanelSections(\n root: AXPPermissionGroupDefinition,\n normalizedQuery: string | null,\n ): PermissionPanelSection[] {\n const children = this.getChildSections(root);\n const sections: PermissionPanelSection[] = [];\n const rootMatches =\n !!normalizedQuery && this.matchesGroup(root, normalizedQuery);\n\n if (children.length === 0) {\n const permissions = normalizedQuery\n ? this.getFilteredGroupPermissions(root, normalizedQuery)\n : (root.permissions ?? []);\n if (!isEmpty(permissions)) {\n sections.push({\n name: root.name,\n title: null,\n items: this.mapPermissions(permissions),\n });\n }\n return sections;\n }\n\n const rootPermissions =\n !normalizedQuery || rootMatches\n ? (root.permissions ?? [])\n : this.getFilteredGroupPermissions(root, normalizedQuery);\n if (!isEmpty(rootPermissions)) {\n sections.push({\n name: `${root.name}__root`,\n title: null,\n items: this.mapPermissions(rootPermissions),\n });\n }\n\n for (const child of children) {\n const sectionMatches =\n !!normalizedQuery && this.matchesGroup(child, normalizedQuery);\n const permissions =\n !normalizedQuery || rootMatches || sectionMatches\n ? (child.permissions ?? [])\n : this.getFilteredGroupPermissions(child, normalizedQuery);\n\n if (isEmpty(permissions)) {\n continue;\n }\n\n sections.push({\n name: child.name,\n title: child.title,\n items: this.mapPermissions(permissions),\n });\n }\n\n return sections;\n }\n\n /**\n * Recursively collects all permission names (parents and children) from an array.\n */\n private collectAllPermissionNames(\n permissions: AXPPermissionDefinition[],\n ): string[] {\n let names: string[] = [];\n for (const item of permissions) {\n names.push(item.name);\n if (item.children?.length) {\n names = names.concat(this.collectAllPermissionNames(item.children));\n }\n }\n return names;\n }\n\n /**\n * Returns the badge count for a root (own permissions + child section permissions).\n */\n private getBadge(group: AXPPermissionGroupDefinition): string {\n const ownNames = this.collectAllPermissionNames(group.permissions || []);\n const childNames = this.getChildSections(group).flatMap((child) =>\n this.collectAllPermissionNames(child.permissions || []),\n );\n const allNames = [...ownNames, ...childNames];\n const selectedPermissions = this.selectedPermissions();\n const count = allNames.filter((name) =>\n selectedPermissions.includes(name),\n ).length;\n return count.toString();\n }\n\n /**\n * Checks if a permission is selected.\n */\n private isSelected(name: string): boolean {\n return this.selectedPermissions().includes(name);\n }\n\n /**\n * Checks if a permission is selected.\n */\n protected badgeToNumber(value: unknown): number {\n return Number(value);\n }\n\n /** Looks up a left-nav root group by tab key (group name). */\n protected getGroupByKey(\n key: string | undefined,\n ): (AXPPermissionGroupDefinition & { badge: string }) | undefined {\n if (!key) {\n return undefined;\n }\n return this.groupsWithBadge().find((group) => group.name === key);\n }\n\n /**\n * Returns true when searchable text contains the query.\n */\n private matchesSearchText(\n text: string | undefined,\n normalizedQuery: string,\n ): boolean {\n if (!text) {\n return false;\n }\n\n const translated = this.translationService.translateSync(text) || text;\n return (\n translated.toLowerCase().includes(normalizedQuery) ||\n text.toLowerCase().includes(normalizedQuery)\n );\n }\n\n /**\n * Returns true when a permission title or description matches the query.\n */\n private matchesPermission(\n permission: AXPPermissionDefinition,\n normalizedQuery: string,\n ): boolean {\n return (\n this.matchesSearchText(permission.title, normalizedQuery) ||\n this.matchesSearchText(permission.description, normalizedQuery)\n );\n }\n\n /**\n * Returns true when a permission group title or description matches the query.\n */\n private matchesGroup(\n group: AXPPermissionGroupDefinition,\n normalizedQuery: string,\n ): boolean {\n return (\n this.matchesSearchText(group.title, normalizedQuery) ||\n this.matchesSearchText(group.description, normalizedQuery)\n );\n }\n\n /**\n * Filters permissions while keeping ancestor nodes for matching descendants.\n */\n private filterPermissions(\n items: AXPPermissionDefinition[],\n normalizedQuery: string,\n ): AXPPermissionDefinition[] {\n const result: AXPPermissionDefinition[] = [];\n\n for (const item of items) {\n const filteredChildren = this.filterPermissions(\n item.children ?? [],\n normalizedQuery,\n );\n const selfMatches = this.matchesPermission(item, normalizedQuery);\n\n if (selfMatches || !isEmpty(filteredChildren)) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n }\n }\n\n return result;\n }\n\n /**\n * Returns filtered permissions for a group, or all permissions when the group itself matches.\n */\n private getFilteredGroupPermissions(\n group: AXPPermissionGroupDefinition,\n normalizedQuery: string,\n ): AXPPermissionDefinition[] {\n const permissions = group.permissions ?? [];\n\n if (this.matchesGroup(group, normalizedQuery)) {\n return permissions;\n }\n\n return this.filterPermissions(permissions, normalizedQuery);\n }\n\n /**\n * Recursively collects all descendant permission names for a single item (including itself).\n */\n private collectPermissionNames(item: MappedPermission): string[] {\n let names = [item.name];\n if (item.children) {\n for (const child of item.children) {\n names = names.concat(this.collectPermissionNames(child));\n }\n }\n return names;\n }\n\n /**\n * Gets the current selected permissions.\n */\n public getSelectedPermissions(): string[] {\n return this.selectedPermissions();\n }\n\n /**\n * Sets the selected permissions.\n */\n public setSelectedPermissions(permissions: string[]): void {\n this.selectedPermissions.set(permissions || []);\n this.permissionsChanged.emit(this.selectedPermissions());\n }\n\n /**\n * Applies/selects the current permissions.\n */\n public selectPermissions(): void {\n this.permissionsSelected.emit(this.selectedPermissions());\n }\n // #endregion\n\n // #region ---------------- Lifecycle Methods ----------------\n /**\n * Initializes the component and loads permission groups.\n * Filters groups to only show permissions from modules enabled for the current tenant.\n */\n override async ngOnInit() {\n super.ngOnInit();\n try {\n const allGroups = await this.permissionService.getGroups();\n const filteredGroups = this.filterGroupsByEnabledModules(allGroups);\n this.groups.set(filteredGroups);\n\n // Select first left-nav root in the same title-sorted order as the sidebar\n const firstRoot = [...filteredGroups]\n .filter((group) => !group.parent)\n .sort((a, b) => this.compareByTitle(a.title, b.title, a.name, b.name))[0];\n if (firstRoot) {\n this.selectedGroup.set(firstRoot);\n }\n // Drop grants for permissions not available in this edition (e.g. platform caps in Safetyminder).\n const available = this.collectAvailablePermissionNames(filteredGroups);\n const initial = this.getInitialPermissions().filter((name) => available.has(name));\n this.selectedPermissions.set(initial);\n this.permissionsChanged.emit(initial);\n } finally {\n this.isEditorLoading.set(false);\n }\n }\n // #endregion\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles group tab/menu item click.\n */\n protected handleMenuItemClick(item: AXPPermissionGroupDefinition) {\n this.selectedGroup.set(item);\n }\n\n /**\n * Updates the search query when the search box value changes.\n */\n protected handleSearchChanged(\n event: AXValueChangedEvent<string | null>,\n ): void {\n this.searchQuery.set(event.value ?? '');\n }\n\n /**\n * Handles permission checkbox toggle (checks/unchecks all children recursively).\n */\n protected onPermissionToggle(\n item: MappedPermission,\n e: AXValueChangedEvent,\n ): void {\n // Don't allow changes in read-only mode\n if (this.isReadOnlyMode()) {\n return;\n }\n\n const names = this.collectPermissionNames(item);\n if (e.value) {\n // Add all names (parent + children), avoiding duplicates\n const set = new Set([...this.selectedPermissions(), ...names]);\n this.selectedPermissions.set(Array.from(set));\n } else {\n // Remove all names (parent + children)\n this.selectedPermissions.set(\n this.selectedPermissions().filter((name) => !names.includes(name)),\n );\n }\n this.permissionsChanged.emit(this.selectedPermissions());\n }\n\n /**\n * Closes the popup without applying permission changes.\n */\n protected handleCancelClick(): void {\n this.close();\n }\n\n /**\n * Applies the current selection and closes the popup.\n */\n protected handleSelectClick(): void {\n const permissions = this.getSelectedPermissions();\n this.permissionsSelected.emit(permissions);\n this.close(permissions);\n }\n // #endregion\n}\n","<div class=\"__frame\">\n @if (isEditorLoading()) {\n <!-- ----- Skeleton while permission groups load ----- -->\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n <div class=\"__groups p-4 w-2/5\" aria-hidden=\"true\">\n <div class=\"flex flex-col gap-3 h-full\">\n @for (widthClass of groupSkeletonPlaceholders(); track $index) {\n <div class=\"flex items-center py-2\">\n <div class=\"h-5 rounded-md overflow-hidden\" [class]=\"widthClass\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div\n class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\"\n aria-hidden=\"true\"\n >\n <div class=\"__header p-4 border-b border-lightest\">\n <div class=\"h-6 w-48 rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__content flex flex-col gap-1 p-4\">\n @for (group of permissionGroupSkeletonPlaceholders(); track $index) {\n <div class=\"__skeleton-permission-group\">\n <div class=\"flex items-center gap-2 py-1\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-40 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__children p-2 mt-1 ms-1\">\n @for (\n childIndex of childSkeletonPlaceholders(group.childCount);\n track childIndex\n ) {\n <div class=\"flex items-center gap-2 py-1 ps-2\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-32 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n <!-- ----- Loaded editor: search + group/permission columns ----- -->\n @else {\n <div class=\"__search px-4 pt-4 pb-3 border-b border-border-lightest\">\n <ax-search-box\n [axAutoFocus]\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"handleSearchChanged($event)\"\n [placeholder]=\"\n '@security-management:permissions-feature.components.permissions-editor.search.placeholder'\n | translate\n | async\n \"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n @if (isSearchActive()) {\n <!-- ----- Search results fill both columns ----- -->\n <div\n class=\"__permissions __permissions--search flex min-h-0 flex-1 flex-col overflow-hidden\"\n >\n @if (hasSearchResults()) {\n <div class=\"__search-results flex min-h-0 flex-1 flex-col overflow-y-auto\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group shrink-0\">\n <div\n class=\"__header shrink-0 p-4 border-b border-border-lightest\"\n >\n <span class=\"h6\">{{\n result.group.title | translate | async\n }}</span>\n </div>\n\n <div class=\"__content flex flex-col gap-4 p-4\">\n @for (section of result.sections; track section.name) {\n <section class=\"__section\">\n @if (section.title) {\n <div class=\"__section-header\">\n <span class=\"__section-title\">{{\n section.title | translate | async\n }}</span>\n </div>\n }\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: section.items }\n \"\n ></ng-container>\n </ul>\n </section>\n }\n </div>\n </section>\n }\n </div>\n }\n <!-- ----- Empty search results ----- -->\n @else {\n <div class=\"__empty flex flex-1 items-center justify-center p-8\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.title'\n \"\n [description]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.description'\n \"\n >\n </axp-state-message>\n </div>\n }\n </div>\n }\n <!-- ----- Browse mode: groups nav + permissions panel ----- -->\n @else {\n <div class=\"__groups w-2/5\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"__group-tabs\">\n @for (group of groupsWithBadge(); track group.name) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [key]=\"group.name\"\n [text]=\"(group.title | translate | async)!\"\n [headerTemplate]=\"groupTabHeader\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <div class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s border-border-lightest\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest font-semibold\">\n <span>{{ $safeNavigationMigration(selectedGroup()?.title)! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex flex-col gap-4 p-4\">\n @for (section of selectedSections(); track section.name) {\n <section class=\"__section\">\n @if (section.title) {\n <div class=\"__section-header\">\n <span class=\"__section-title\">{{\n section.title | translate | async\n }}</span>\n </div>\n }\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: section.items }\n \"\n ></ng-container>\n </ul>\n </section>\n }\n </div>\n </div>\n }\n </div>\n }\n</div>\n\n@if (isShowActions()) {\n <!-- ----- Dialog footer actions ----- -->\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancelClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.select.title' | translate | async\"\n (onClick)=\"handleSelectClick()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-check\"></i>\n </ax-prefix>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n}\n\n<!-- ----- Left-nav group tab: title + description + badge ----- -->\n<ng-template #groupTabHeader let-ctx>\n @if (getGroupByKey(ctx.key); as group) {\n <div class=\"__group-tab\">\n <div class=\"__group-tab-main\">\n <div class=\"__group-tab-title\">{{ ctx.text }}</div>\n @if (group.description) {\n <div class=\"__group-tab-description\">\n {{ group.description | translate | async }}\n </div>\n }\n </div>\n @if (badgeToNumber(group.badge) > 0) {\n <ax-badge\n class=\"__group-tab-badge\"\n [color]=\"'primary'\"\n [look]=\"'twotone'\"\n [text]=\"group.badge\"\n ></ax-badge>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n <span class=\"__permission-label\">\n <span class=\"__permission-title\">{{\n item.title | translate | async\n }}</span>\n @if (item.description) {\n <span class=\"__permission-description\">{{\n item.description | translate | async\n }}</span>\n }\n </span>\n </ax-label>\n </ax-check-box>\n\n @if (item.children && item.children.length > 0) {\n <ul class=\"__children p-2 mt-1 ms-1\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: item.children }\n \"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityBroadcastService } from '@acorex-platform/framework-client/core';\nimport {\n AXPEntityDefinitionRegistryService,\n AXPEntityService,\n dispatchEntityModifiedSideEffects,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport type { RolePermissionGrantRow, SaveRolePermissionGrantOptions } from './role-permission-grant.types';\n\n//#endregion\n\n//#region ----- Service -----\n\n/**\n * Loads and persists scoped RolePermission grants for a role.\n * Shared by the Assign Permissions dialog and the Role permissions detail page.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMRolePermissionGrantService {\n //#region ----- Services & Dependencies -----\n\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly entityEvents = inject(AXPEntityBroadcastService);\n\n //#endregion\n\n //#region ----- Scope -----\n\n resolveSessionScope(): { tenantId: string; applicationId: string | undefined } | null {\n const tenantId = this.sessionService.tenant?.id;\n if (!tenantId) {\n return null;\n }\n return {\n tenantId,\n applicationId: this.sessionService.application?.id,\n };\n }\n\n //#endregion\n\n //#region ----- Query -----\n\n private rolePermissionData() {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.rolePermission.name)\n .data<string, RolePermissionGrantRow, RolePermissionGrantRow>();\n }\n\n async findGrant(\n roleId: string,\n tenantId: string,\n applicationId: string | undefined,\n ): Promise<RolePermissionGrantRow | null> {\n const result = await this.rolePermissionData().query({\n skip: 0,\n take: 50,\n filter: {\n logic: 'and',\n filters: [\n { field: 'roleId', operator: { type: 'equal' }, value: roleId },\n { field: 'scopeInfo.tenantId', operator: { type: 'equal' }, value: tenantId },\n ],\n },\n } as never);\n\n const items = (result?.items ?? []) as RolePermissionGrantRow[];\n if (items.length === 0) {\n return null;\n }\n\n if (applicationId) {\n const appMatch = items.find((item) => item.scopeInfo?.applicationId === applicationId);\n if (appMatch) {\n return appMatch;\n }\n }\n\n const tenantWide = items.find((item) => !item.scopeInfo?.applicationId);\n return tenantWide ?? items[0] ?? null;\n }\n\n //#endregion\n\n //#region ----- Persist -----\n\n async saveGrant(options: SaveRolePermissionGrantOptions): Promise<Record<string, unknown>> {\n const existingState = options.existing?.stateInfo;\n if (existingState?.isSystem === true || existingState?.isImmutable === true) {\n throw new Error('System role permission grants are readonly.');\n }\n\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.rolePermission.name}`;\n const [moduleName, entityName] = entityKey.split('.');\n const entityRef = await this.entityRegistry.resolve(moduleName, entityName);\n\n const scopeInfo = {\n tenantId: options.tenantId,\n ...(options.existing?.scopeInfo?.applicationId\n ? { applicationId: options.existing.scopeInfo.applicationId }\n : options.applicationId\n ? { applicationId: options.applicationId }\n : {}),\n };\n\n if (options.existing?.id) {\n const updatePayload = {\n ...options.existing,\n roleId: options.roleId,\n permissions: options.permissions,\n scopeInfo,\n };\n return (\n entityRef.commands?.update?.execute as (data: Record<string, unknown>) => Promise<Record<string, unknown>>\n )(updatePayload);\n }\n\n const createPayload = {\n roleId: options.roleId,\n permissions: options.permissions,\n scopeInfo,\n };\n return (\n entityRef.commands?.create?.execute as (data: Record<string, unknown>) => Promise<Record<string, unknown>>\n )(createPayload);\n }\n\n notifyGrantModified(saved: Record<string, unknown>): void {\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.rolePermission.name}`;\n dispatchEntityModifiedSideEffects(this.entityEvents, entityKey, saved);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport { isArray, isEmpty, isString } from 'lodash-es';\nimport { AXMRolePermissionGrantService } from '../role-permission-grant.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMAssignPermissionsCommandInput {\n data?: Record<string, unknown>;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable()\nexport class AXMAssignPermissionsCommand implements AXPCommand<AXMAssignPermissionsCommandInput, string[] | null> {\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly grantService = inject(AXMRolePermissionGrantService);\n\n //#endregion\n\n //#region ----- Execute -----\n\n async execute(input: AXMAssignPermissionsCommandInput): AXPCommandExecuteResultPromise<string[] | null> {\n try {\n const role = input.data;\n if (!role || !isString(role['id']) || isEmpty(role['id'])) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const roleId = role['id'] as string;\n const scope = this.grantService.resolveSessionScope();\n if (!scope) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const existingGrant = await this.grantService.findGrant(roleId, scope.tenantId, scope.applicationId);\n const grantReadonly =\n existingGrant?.stateInfo?.isSystem === true || existingGrant?.stateInfo?.isImmutable === true;\n\n const component = await import('../permissions-editor/permissions-editor.component').then(\n (m) => m.AXPPermissionsEditorComponent,\n );\n\n const editorTitle = await this.translationService.translateAsync(\n '@security-management:permissions-feature.terms.permissions-editor',\n );\n const roleTitle = this.resolveRoleTitle(role['title']);\n const initialPermissions = existingGrant?.permissions ?? [];\n\n const popupResult = await this.popupService.open(component, {\n title: roleTitle ? `${editorTitle} - ${roleTitle}` : editorTitle,\n size: 'md',\n data: {\n initialPermissions,\n showActions: !grantReadonly,\n readOnly: grantReadonly,\n },\n });\n\n const permissions = popupResult?.data;\n if (!isArray(permissions) || grantReadonly) {\n return { success: true, kind: 'object', data: null, metadata: { refresh: false } };\n }\n\n const saved = await this.grantService.saveGrant({\n existing: existingGrant,\n roleId,\n permissions: permissions as string[],\n tenantId: scope.tenantId,\n applicationId: scope.applicationId,\n });\n\n await this.showSuccessToast();\n this.grantService.notifyGrantModified(saved);\n\n return {\n success: true,\n kind: 'object',\n data: permissions as string[],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to assign permissions.';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n\n //#endregion\n\n //#region ----- Utility Methods -----\n\n private resolveRoleTitle(title: unknown): string {\n if (!title) {\n return '';\n }\n\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n if (isString(title)) {\n return resolveMultiLanguageString(title, locale).trim();\n }\n\n return resolveMultiLanguageString(String(title), locale).trim();\n }\n\n private async showSuccessToast(): Promise<void> {\n const enableOperationToasts = await this.settingsService.get<boolean>(AXPCommonSettings.EnableOperationToasts);\n if (!enableOperationToasts) {\n return;\n }\n\n this.toastService.show({\n color: 'success',\n title: await this.translationService.translateAsync('@general:workflow.entity-modified-title'),\n content: await this.translationService.translateAsync('@general:workflow.entity-modified-body'),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","/**\n * Resolves a persisted host entity id from wizard/details context (supports id, _id, string or number).\n */\nexport function resolvePersistedEntityId(ctx: Record<string, unknown> | null | undefined): string | undefined {\n if (!ctx) {\n return undefined;\n }\n const raw = ctx['id'] ?? ctx['_id'];\n if (typeof raw === 'string' && raw.length > 0) {\n return raw;\n }\n if (typeof raw === 'number' && !Number.isNaN(raw)) {\n return String(raw);\n }\n return undefined;\n}\n","//#region ----- Imports -----\n\nimport {\n AXPActionMenuItem,\n AXPExecuteCommand,\n type AXPRuntimeCommandResult,\n} from '@acorex-platform/framework-shared/core';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPLayoutDetailsViewAction } from '@acorex-platform/framework-client/layout/views';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { AXPPermissionsEditorComponent } from '../../permissions-editor/permissions-editor.component';\nimport { AXMRolePermissionGrantService } from '../../role-permission-grant.service';\nimport type { RolePermissionGrantRow } from '../../role-permission-grant.types';\nimport { resolvePersistedEntityId } from '../../resolve-persisted-entity-id.util';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Local command handled in execute(); reverts permissions to the loaded grant baseline. */\nconst ROLE_PERMISSIONS_DISCARD_COMMAND = 'Role:Permissions:Discard';\n/** Local command handled in execute(); persists the scoped RolePermission grant. */\nconst ROLE_PERMISSIONS_SAVE_COMMAND = 'Role:Permissions:Save';\n\n//#endregion\n\n//#region ----- Component -----\n\n/**\n * Role detail/create wizard page that edits scoped RolePermission grants.\n * Extends AXPPageLayoutBaseComponent for Save/Discard footer actions and dirty tracking.\n */\n@Component({\n selector: 'axm-role-permissions-page',\n standalone: true,\n imports: [AXPPermissionsEditorComponent, AXPStateMessageComponent, AXLoadingModule],\n templateUrl: './role-permissions-page.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMRolePermissionsPageComponent,\n },\n ],\n host: {\n class: 'flex h-full min-h-0 flex-1 flex-col overflow-hidden',\n },\n})\nexport class AXMRolePermissionsPageComponent extends AXPPageLayoutBaseComponent {\n //#region ----- Inputs -----\n\n rootContext = input<Record<string, unknown>>();\n /** Optional page config set by the page-component-renderer. */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ----- Services & Dependencies -----\n\n private readonly grantService = inject(AXMRolePermissionGrantService);\n private readonly hostPageLayout = inject(AXPPageLayoutBase, { optional: true, skipSelf: true });\n\n //#endregion\n\n //#region ----- State Signals -----\n\n private readonly loadedRoleId = signal<string | undefined>(undefined);\n private readonly existingGrant = signal<RolePermissionGrantRow | null>(null);\n private readonly baselinePermissions = signal<string[]>([]);\n private readonly currentPermissions = signal<string[]>([]);\n protected readonly isLoading = signal(true);\n /** Bumps when the editor should remount with a new initialPermissions snapshot (e.g. after discard). */\n protected readonly editorResetToken = signal(0);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly roleId = computed(() => resolvePersistedEntityId(this.rootContext()));\n\n protected readonly editorPermissions = computed(() => {\n // Depend on reset token so discard remounts the editor with baseline values.\n this.editorResetToken();\n return [...this.currentPermissions()];\n });\n\n protected readonly isDirty = computed(() => {\n return !this.arePermissionSetsEqual(this.baselinePermissions(), this.currentPermissions());\n });\n\n /** System RolePermission grants are seeded and not editable in product/platform UI. */\n protected readonly isGrantReadonly = computed(() => {\n const state = this.existingGrant()?.stateInfo;\n return state?.isSystem === true || state?.isImmutable === true;\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const id = this.roleId();\n // Avoid re-running when loadGrantForRole mutates its own loading/baseline signals.\n untracked(() => {\n void this.loadGrantForRole(id);\n });\n });\n }\n\n //#endregion\n\n //#region ----- Unsaved Changes -----\n\n override hasUnsavedChanges(): boolean {\n return this.isDirty();\n }\n\n //#endregion\n\n //#region ----- Page Actions -----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const discardTitle = (await this.translateService.translateAsync('@general:actions.discard.title')) || 'Discard';\n const saveTitle = (await this.translateService.translateAsync('@general:actions.save.title')) || 'Save';\n\n const canEdit = !!this.roleId() && !this.isLoading() && !this.isGrantReadonly();\n\n const discardAction: AXPLayoutDetailsViewAction = {\n title: discardTitle,\n icon: 'fa-light fa-rotate-left',\n zone: 'footer',\n priority: 'secondary',\n color: 'default',\n visible: canEdit && this.isDirty(),\n command: {\n name: ROLE_PERMISSIONS_DISCARD_COMMAND,\n options: {},\n },\n };\n\n const saveAction: AXPLayoutDetailsViewAction = {\n title: saveTitle,\n icon: 'fa-light fa-floppy-disk',\n zone: 'footer',\n priority: 'primary',\n color: 'primary',\n visible: canEdit && this.isDirty(),\n command: {\n name: ROLE_PERMISSIONS_SAVE_COMMAND,\n options: {},\n },\n };\n\n return [discardAction, saveAction];\n }\n\n //#endregion\n\n //#region ----- Command Handling -----\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === ROLE_PERMISSIONS_DISCARD_COMMAND) {\n this.handleDiscard();\n return;\n }\n if (command.name !== ROLE_PERMISSIONS_SAVE_COMMAND) {\n return;\n }\n return this.handleSaveExecute() as unknown as Promise<void>;\n }\n\n private async handleSaveExecute(): AXPCommandExecuteResultPromise {\n const roleId = this.roleId();\n const scope = this.grantService.resolveSessionScope();\n\n if (!roleId || !scope) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const permissions = [...this.currentPermissions()];\n const saved = await this.grantService.saveGrant({\n existing: this.existingGrant(),\n roleId,\n permissions,\n tenantId: scope.tenantId,\n applicationId: scope.applicationId,\n });\n\n const nextGrant: RolePermissionGrantRow = {\n id: String(saved['id'] ?? this.existingGrant()?.id ?? ''),\n roleId,\n permissions,\n scopeInfo: (saved['scopeInfo'] as RolePermissionGrantRow['scopeInfo']) ?? this.existingGrant()?.scopeInfo,\n };\n this.existingGrant.set(nextGrant.id ? nextGrant : this.existingGrant());\n this.baselinePermissions.set([...permissions]);\n this.currentPermissions.set([...permissions]);\n this.grantService.notifyGrantModified(saved);\n this.recompute();\n\n return {\n success: true,\n kind: 'object',\n data: permissions,\n } as AXPRuntimeCommandResult;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to save permissions.';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onPermissionsChanged(permissions: string[]): void {\n if (this.arePermissionSetsEqual(this.currentPermissions(), permissions)) {\n return;\n }\n this.currentPermissions.set([...permissions]);\n this.recompute();\n }\n\n private handleDiscard(): void {\n const baseline = [...this.baselinePermissions()];\n this.currentPermissions.set(baseline);\n this.editorResetToken.update((token) => token + 1);\n this.recompute();\n }\n\n //#endregion\n\n //#region ----- Wizard step context -----\n\n /**\n * Do not merge permissions into the Role create/update payload.\n * Grants live on SecurityManagement.RolePermission only.\n */\n override getWizardStepContext(): Record<string, unknown> | null {\n return null;\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private async loadGrantForRole(roleId: string | undefined): Promise<void> {\n if (!roleId) {\n this.loadedRoleId.set(undefined);\n this.existingGrant.set(null);\n this.baselinePermissions.set([]);\n this.currentPermissions.set([]);\n this.isLoading.set(false);\n this.recompute();\n return;\n }\n\n if (roleId === this.loadedRoleId() && !this.isLoading()) {\n return;\n }\n\n this.isLoading.set(true);\n this.recompute();\n\n const scope = this.grantService.resolveSessionScope();\n if (!scope) {\n this.loadedRoleId.set(roleId);\n this.existingGrant.set(null);\n this.baselinePermissions.set([]);\n this.currentPermissions.set([]);\n this.isLoading.set(false);\n this.recompute();\n return;\n }\n\n try {\n const grant = await this.grantService.findGrant(roleId, scope.tenantId, scope.applicationId);\n const permissions = [...(grant?.permissions ?? [])];\n this.loadedRoleId.set(roleId);\n this.existingGrant.set(grant);\n this.baselinePermissions.set(permissions);\n this.currentPermissions.set([...permissions]);\n this.editorResetToken.update((token) => token + 1);\n } catch {\n this.loadedRoleId.set(roleId);\n this.existingGrant.set(null);\n this.baselinePermissions.set([]);\n this.currentPermissions.set([]);\n } finally {\n this.isLoading.set(false);\n this.recompute();\n }\n }\n\n //#endregion\n\n //#region ----- Utility Methods -----\n\n private arePermissionSetsEqual(a: string[], b: string[]): boolean {\n return isEqual([...a].sort(), [...b].sort());\n }\n\n protected override recompute(): void {\n super.recompute();\n const maybeLayout = this.hostPageLayout as unknown as { recompute?: () => void };\n maybeLayout?.recompute?.();\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (isLoading()) {\n <!-- ----- Loading grant while role permissions are fetched ----- -->\n <div class=\"flex h-full min-h-[20rem] items-center justify-center p-6\">\n <ax-loading></ax-loading>\n </div>\n}\n<!-- ----- Role must be persisted before grants can be edited ----- -->\n@else if (!roleId()) {\n <div class=\"flex h-full min-h-[20rem] items-center justify-center p-6\">\n <axp-state-message\n [title]=\"'@security-management:roles.entities.role.pages.permissions.save-role-first.title'\"\n [description]=\"'@security-management:roles.entities.role.pages.permissions.save-role-first.description'\"\n ></axp-state-message>\n </div>\n}\n<!-- ----- Full-page permissions editor for the scoped RolePermission grant ----- -->\n@else {\n <div class=\"flex h-full min-h-0 flex-1 flex-col overflow-hidden p-4\">\n <!-- ----- Remount editor when discard/load resets the selection baseline ----- -->\n @for (token of [editorResetToken()]; track token) {\n <axm-permissions-editor\n [initialPermissions]=\"editorPermissions()\"\n [readOnly]=\"isGrantReadonly()\"\n [fillHeight]=\"true\"\n (permissionsChanged)=\"onPermissionsChanged($event)\"\n ></axm-permissions-editor>\n }\n </div>\n}\n","//#region ----- Imports -----\n\nimport {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { ROLE_PERMISSIONS_PAGE_COMPONENT_KEY } from '@acorex-platform/module-security-management-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Provider -----\n\n@Injectable()\nexport class AXMRolePermissionsPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: ROLE_PERMISSIONS_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./role-permissions-page.component').then((m) => m.AXMRolePermissionsPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, computed, inject, signal, effect } from '@angular/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPPermissionDefinitionService, AXPPermissionGroupDefinition, AXPPermissionDefinition } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\ninterface PermissionPath {\n group: AXPPermissionGroupDefinition;\n path: AXPPermissionDefinition[];\n displayPath: string;\n}\n\n@Component({\n selector: 'axm-permissions-widget-view',\n template: `\n <!-- <axm-permissions-editor\n [initialPermissions]=\"getValue() || []\"\n [readOnly]=\"true\">\n </axm-permissions-editor> -->\n <div class=\"flex flex-col gap-2\">\n @for (group of groups(); track group.name) {\n @if (selectedPermissionsByGroup()[group.name]?.length) {\n <div>\n <div class=\"text-xs font-semibold mb-2 text-muted\">{{ group.title }}</div>\n <div class=\"flex gap-1 flex-wrap\">\n @for (permPath of selectedPermissionsByGroup()[group.name]; track permPath.path[permPath.path.length - 1].name) {\n <ax-badge [text]=\"permPath.displayPath\" color=\"primary\" size=\"sm\"></ax-badge>\n }\n </div>\n </div>\n }\n }\n @if (isEmpty()) {\n <axp-state-message\n icon=\"fa-light fa-shield-check\"\n [title]=\"'@security-management:permissions-feature.components.permissions-editor.empty-states.no-permissions.title'\"\n [description]=\"'@security-management:permissions-feature.components.permissions-editor.empty-states.no-permissions.description'\">\n </axp-state-message>\n }\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXTranslationModule, AXPStateMessageComponent]\n})\nexport class AXPPermissionsWidgetViewComponent extends AXPValueWidgetComponent<string[]> {\n private permissionService = inject(AXPPermissionDefinitionService);\n private readonly commandService = inject(AXPCommandService);\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n private loadGroupsEffect = effect(async () => {\n // Load groups when component initializes\n if (this.groups().length === 0) {\n const groupsData = await this.permissionService.getGroups();\n this.groups.set(groupsData);\n }\n });\n\n protected selectedPermissionsByGroup = computed(() => {\n const selected = new Set(this.getValue() ?? []);\n const result: Record<string, PermissionPath[]> = {};\n\n for (const group of this.groups()) {\n const permPaths: PermissionPath[] = [];\n\n const findPermissionPaths = (items: AXPPermissionDefinition[], path: AXPPermissionDefinition[] = []) => {\n for (const item of items) {\n const currentPath = [...path, item];\n\n if (selected.has(item.name)) {\n const displayPath = currentPath.map(p => p.title).join(' > ');\n permPaths.push({\n group,\n path: currentPath,\n displayPath\n });\n }\n\n if (item.children?.length) {\n findPermissionPaths(item.children, currentPath);\n }\n }\n };\n\n findPermissionPaths(group.permissions);\n result[group.name] = permPaths;\n }\n\n return result;\n });\n\n protected isEmpty = computed(() => {\n return Object.values(this.selectedPermissionsByGroup()).every(arr => !arr.length);\n });\n\n protected async openPermissionsEditor() {\n await this.commandService.execute('assign-permissions', {\n data: this.contextService.data(),\n entity: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n \n });\n }\n\n}\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AXPPermissionsEditorComponent } from '../permissions-editor/permissions-editor.component';\n\n@Component({\n selector: 'axm-permissions-widget-edit',\n template: `\n <axm-permissions-editor\n [initialPermissions]=\"getValue() || []\"\n [readOnly]=\"false\"\n (permissionsChanged)=\"onPermissionsChanged($event)\">\n </axm-permissions-editor>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXPPermissionsEditorComponent\n]\n})\nexport class AXPPermissionsWidgetEditComponent extends AXPValueWidgetComponent<string[]> {\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles permissions changes from the editor.\n */\n protected onPermissionsChanged(permissions: string[]): void {\n this.setValue(permissions);\n }\n // #endregion\n\n}","import { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { castArray } from 'lodash-es';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n@Component({\n selector: 'axm-permissions-widget-column',\n template: `\n <span class=\"cursor-pointer text-primary underline\" (click)=\"openPermissionsEditor()\">{{count()}} {{'@security-management:permissions-feature.terms.permissions' | translate | async}}</span>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n inputs: ['rawValue', 'rowData']\n})\nexport class AXPPermissionsWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n\n protected count = computed(() => castArray(this.rawValue).length);\n private readonly commandService = inject(AXPCommandService);\n\n async openPermissionsEditor() {\n await this.commandService.execute('assign-permissions', {\n data: this.rowData,\n entity: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n \n });\n }\n}\n","// Permission Editor Components\nexport { AXPPermissionsEditorComponent } from './permissions-editor/permissions-editor.component';\nexport { AXMAssignPermissionsCommand } from './commands/assign-permissions.command';\nexport { AXMPermissionsModule } from './permissions.module';\nexport { AXMRolePermissionGrantService } from './role-permission-grant.service';\nexport * from './pages/role-permissions-page';\n\n// Widgets\nexport * from './permissions-widget/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
@@ -23,6 +23,8 @@ const AXPSecurityManagementFeatureKeys = {
|
|
|
23
23
|
ManagePolicies: 'SecurityManagement:Feature:ManagePolicies',
|
|
24
24
|
/** Platform Console only — Identity Provider management menu + CRUD. */
|
|
25
25
|
ManageIdentityProviders: 'SecurityManagement:Feature:ManageIdentityProviders',
|
|
26
|
+
/** Self-service account deletion on the profile page. Off unless the edition enables it. */
|
|
27
|
+
DeleteAccount: 'SecurityManagement:Feature:DeleteAccount',
|
|
26
28
|
};
|
|
27
29
|
//#endregion
|
|
28
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-security-management-client-contracts.mjs","sources":["../../../../libs/modules/security-management/contracts/src/lib/context.definitions.ts","../../../../libs/modules/security-management/contracts/src/features.keys.ts","../../../../libs/modules/security-management/contracts/src/menu.keys.ts","../../../../libs/modules/security-management/contracts/src/permission.keys.ts","../../../../libs/modules/security-management/contracts/src/ROLE_PERMISSIONS_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/security-management/contracts/src/USER_ROLES_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/security-management/contracts/src/root-config.ts","../../../../libs/modules/security-management/contracts/src/AXM_USER_ACCESS_STATE_DEFINITION_KEY.ts","../../../../libs/modules/security-management/contracts/src/AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY.ts","../../../../libs/modules/security-management/contracts/src/user-access-state.ts","../../../../libs/modules/security-management/contracts/src/user-effective-state.ts","../../../../libs/modules/security-management/contracts/src/resolve-user-effective-state.ts","../../../../libs/modules/security-management/contracts/src/user-password-reset.ts","../../../../libs/modules/security-management/contracts/src/server-commands.ts","../../../../libs/modules/security-management/contracts/src/entities/device-sessions/device-sessions.types.ts","../../../../libs/modules/security-management/contracts/src/entities/identity-provider/identity-provider.types.ts","../../../../libs/modules/security-management/contracts/src/entities/policy/policy.types.ts","../../../../libs/modules/security-management/contracts/src/entities/role-permission/role-permission.types.ts","../../../../libs/modules/security-management/contracts/src/entities/user-role/user-role.types.ts","../../../../libs/modules/security-management/contracts/src/index.ts","../../../../libs/modules/security-management/contracts/src/acorex-platform-module-security-management-client-contracts.ts"],"sourcesContent":["import type { AXPContextDefinition } from '@acorex-platform/framework-shared/core';\n\n//#region ---- User context definitions ----\n\nexport const AXM_SECURITY_CONTEXT_DEFINITIONS: AXPContextDefinition[] = [\n {\n name: 'userDisplayName',\n title: 'User display name',\n description:\n 'Human-readable name of the signed-in user (name or title from session). Used for personalized responses.',\n order: 11,\n capabilities: ['ai'],\n },\n];\n\n//#endregion\n","//#region ---- Feature Keys ----\n\n/**\n * Security Management Module Feature Keys.\n * Defines all available features for the Security Management module.\n */\nexport const AXPSecurityManagementFeatureKeys = {\n ManageRoles: 'SecurityManagement:Feature:ManageRoles',\n ManageUsers: 'SecurityManagement:Feature:ManageUsers',\n MaxTotalUsers: 'SecurityManagement:Feature:MaxTotalUsers',\n ManageSessions: 'SecurityManagement:Feature:ManageSessions',\n ManagePolicies: 'SecurityManagement:Feature:ManagePolicies',\n /** Platform Console only — Identity Provider management menu + CRUD. */\n ManageIdentityProviders: 'SecurityManagement:Feature:ManageIdentityProviders',\n} as const;\n\n//#endregion\n\n","export const AXPSecurityManagementMenuKeys = {\n Root: 'SecurityManagement:Menu',\n Users: 'SecurityManagement:Menu:Users',\n Roles: 'SecurityManagement:Menu:Roles',\n DeviceSessions: 'SecurityManagement:Menu:DeviceSessions',\n Policy: 'SecurityManagement:Menu:Policy',\n IdentityProviders: 'SecurityManagement:Menu:IdentityProviders',\n MyProfile: 'SecurityManagement:Menu:MyProfile',\n} as const;\n","/**\n * Administration capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n /** Create and maintain users, roles, role assignments, and related security-access reports. */\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n ManageIntegrationActions: 'Administration:Permission:ManageIntegrationActions',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXPSecurityManagementPermissionKeys = {\n User: {\n Management: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n View: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Edit: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Delete: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Create: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n },\n Role: {\n Management: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n View: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Edit: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Delete: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Create: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n },\n DeviceSession: {\n Management: AXPAdministrationPermissionKeys.ManageSessions,\n View: AXPAdministrationPermissionKeys.ManageSessions,\n Terminate: AXPAdministrationPermissionKeys.ManageSessions,\n },\n Policy: {\n Management: AXPAdministrationPermissionKeys.MaintainPolicies,\n View: AXPAdministrationPermissionKeys.MaintainPolicies,\n Edit: AXPAdministrationPermissionKeys.MaintainPolicies,\n Delete: AXPAdministrationPermissionKeys.MaintainPolicies,\n Create: AXPAdministrationPermissionKeys.MaintainPolicies,\n },\n} as const;\n","/** Component key for the Role permissions page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const ROLE_PERMISSIONS_PAGE_COMPONENT_KEY = 'role-permissions-page';\n","export const USER_ROLES_PAGE_COMPONENT_KEY = 'user-roles-page';\n","const config = {\n i18n: 'security-management',\n profileEntity: 'Profile',\n};\nexport const RootConfig = {\n config,\n module: {\n route: 'security-management',\n name: 'SecurityManagement',\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-shield-halved',\n },\n entities: {\n policy: {\n name: 'Policy',\n title: `@${config.i18n}:policies.entities.policy.title`,\n titlePlural: `@${config.i18n}:policies.entities.policy.plural`,\n icon: 'fa-light fa-clipboard-list',\n },\n deviceSessions: {\n name: 'DeviceSessions',\n title: `@${config.i18n}:sessions.entities.session.title`,\n titlePlural: `@${config.i18n}:sessions.entities.session.plural`,\n icon: 'fa-light fa-laptop',\n },\n users: {\n name: 'User',\n title: `@${config.i18n}:users.entities.user.title`,\n titlePlural: `@${config.i18n}:users.entities.user.plural`,\n icon: 'fa-light fa-users',\n },\n roles: {\n name: 'Role',\n title: `@${config.i18n}:roles.entities.role.title`,\n titlePlural: `@${config.i18n}:roles.entities.role.plural`,\n icon: 'fa-light fa-user-tag',\n },\n rolePermission: {\n name: 'RolePermission',\n title: `@${config.i18n}:role-permissions.entities.role-permission.title`,\n titlePlural: `@${config.i18n}:role-permissions.entities.role-permission.plural`,\n icon: 'fa-light fa-key',\n },\n userRole: {\n name: 'UserRole',\n title: `@${config.i18n}:user-roles.entities.user-role.title`,\n titlePlural: `@${config.i18n}:user-roles.entities.user-role.plural`,\n icon: 'fa-light fa-user-tag',\n },\n profile: {\n name: 'Profile',\n title: `@${config.i18n}:profile.entities.profile.title`,\n titlePlural: `@${config.i18n}:profile.entities.profile.plural`,\n icon: 'fa-light fa-user',\n },\n identityProvider: {\n name: 'IdentityProvider',\n title: `@${config.i18n}:identity-providers.entities.identity-provider.title`,\n titlePlural: `@${config.i18n}:identity-providers.entities.identity-provider.plural`,\n icon: 'fa-light fa-id-badge',\n },\n },\n queries: {\n reports: {\n getUserEffectiveRolesHistory: 'SecurityManagement:Reports:GetUserEffectiveRolesHistory',\n getUserEffectivePermissionsHistory:\n 'SecurityManagement:Reports:GetUserEffectivePermissionsHistory',\n getRoleHoldersHistory: 'SecurityManagement:Reports:GetRoleHoldersHistory',\n getPermissionHoldersHistory: 'SecurityManagement:Reports:GetPermissionHoldersHistory',\n getUserPasswordChangeHistory: 'SecurityManagement:Reports:GetUserPasswordChangeHistory',\n },\n },\n} as const;\n","/** Status provider key for `accessState` on SecurityManagement.User (transitions define editable paths in the status UI). */\nexport const AXM_USER_ACCESS_STATE_DEFINITION_KEY = 'security-management.access-state.user';\n","/** Status provider key for persisted `effectiveState` on SecurityManagement.User (derived; read-only in UI). */\nexport const AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY = 'security-management.effective-state.user';\n","//#region ---- User access state ----\n\n/**\n * Read-only sign-in gate from the authentication layer (distinct from account `accountState`).\n * Persisted as the enum string value (e.g. `allowed`).\n */\nexport enum AXMUserAccessState {\n Allowed = 'allowed',\n Blocked = 'blocked',\n Expired = 'expired',\n}\n\n//#endregion\n","//#region ---- User effective (unified) state ----\n\n/**\n * Single operational state derived from account lifecycle and sign-in gate (persisted snapshot in mock/backend).\n */\nexport enum AXMUserEffectiveState {\n Pending = 'pending',\n Active = 'active',\n Suspended = 'suspended',\n Inactive = 'inactive',\n Archived = 'archived',\n SignInBlocked = 'sign-in-blocked',\n CredentialExpired = 'credential-expired',\n}\n\n//#endregion\n","import { AXMUserAccessState } from './user-access-state';\nimport { AXMUserEffectiveState } from './user-effective-state';\n\n//#region ---- Resolve effective state ----\n\nconst AccountLifecycleState = {\n Active: 'active',\n Archived: 'archived',\n Pending: 'pending',\n Inactive: 'inactive',\n Suspended: 'suspended',\n} as const;\n\n/**\n * Derives the unified operational state from account lifecycle and sign-in gate.\n * Used for persisted `effectiveState` on SecurityManagement.User.\n */\nexport function resolveAXMUserEffectiveState(input: {\n accountState: string | undefined;\n accessState: AXMUserAccessState | string | undefined;\n}): AXMUserEffectiveState {\n const lifecycle = input.accountState;\n const auth = (input.accessState ?? AXMUserAccessState.Allowed) as string;\n\n if (lifecycle === AccountLifecycleState.Archived) {\n return AXMUserEffectiveState.Archived;\n }\n if (lifecycle === AccountLifecycleState.Pending) {\n return AXMUserEffectiveState.Pending;\n }\n if (lifecycle === AccountLifecycleState.Inactive) {\n return AXMUserEffectiveState.Inactive;\n }\n if (lifecycle === AccountLifecycleState.Suspended) {\n return AXMUserEffectiveState.Suspended;\n }\n if (auth === AXMUserAccessState.Expired) {\n return AXMUserEffectiveState.CredentialExpired;\n }\n if (auth === AXMUserAccessState.Blocked) {\n return AXMUserEffectiveState.SignInBlocked;\n }\n if (lifecycle === AccountLifecycleState.Active) {\n return AXMUserEffectiveState.Active;\n }\n return AXMUserEffectiveState.Active;\n}\n\n//#endregion\n","//#region ---- Password reset payload on User ----\n\n/**\n * One-time password-reset token state stored as JSON on SecurityManagement.User.\n * The raw token is never persisted — only a SHA-256 hash.\n */\nexport interface AXMUserPasswordResetInfo {\n tokenHash: string;\n expiresAt: string;\n sentAt: string;\n}\n\n//#endregion\n","//#region ---- Security management server command keys ----\n\nexport const AXMSecurityManagementServerCommands = {\n SendPasswordResetEmail: 'SecurityManagement:Server:SendPasswordResetEmail',\n CompletePasswordReset: 'SecurityManagement:Server:CompletePasswordReset',\n ChangeOwnPassword: 'SecurityManagement:Server:ChangeOwnPassword',\n} as const;\n\n/** Stable codes for self-service password change (client maps to i18n). */\nexport const AXM_CHANGE_OWN_PASSWORD_ERROR_CODES = {\n NotSignedIn: 'CHANGE_OWN_PASSWORD_NOT_SIGNED_IN',\n IncorrectCurrent: 'CHANGE_OWN_PASSWORD_INCORRECT_CURRENT',\n SameAsCurrent: 'CHANGE_OWN_PASSWORD_SAME_AS_CURRENT',\n InvalidInput: 'CHANGE_OWN_PASSWORD_INVALID_INPUT',\n} as const;\n\n/** Client/UI action key (confirm dialog → server send). */\nexport const AXM_USER_SEND_PASSWORD_RESET_COMMAND = 'SecurityManagement:User:SendPasswordResetEmail';\n\nexport interface AXMSendPasswordResetEmailInput {\n /** Admin path: target user id. */\n userId?: string;\n /** Forgot path: email or username. */\n login?: string;\n /** Optional absolute web origin for reset link (defaults to env / localhost). */\n webOrigin?: string;\n}\n\nexport interface AXMCompletePasswordResetInput {\n token: string;\n newPassword: string;\n}\n\nexport interface AXMChangeOwnPasswordInput {\n currentPassword: string;\n newPassword: string;\n}\n\nexport interface AXMChangeOwnPasswordResult {\n passwordChangedAt: string;\n}\n\n//#endregion\n","import { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\nexport enum AXMSessionStatusTypes {\n revoked = 'revoked',\n expired = 'expired',\n active = 'active',\n}\n\nexport interface AXMSecurityManagementDeviceSessionsEntityModel extends AXPEntityModel<string> {\n clientName: string;\n ipAddress: string;\n userAgent: string;\n authorizationId: string;\n status: string;\n userId: string;\n user: {\n id: string;\n name: string;\n };\n applicationId: string;\n application: {\n id: string;\n name: string;\n };\n tenantId: string;\n tenant: {\n id: string;\n name: string;\n };\n isActiveSession: boolean;\n\n deviceName: string;\n operatingSystem: string;\n browser: string;\n location: string;\n lastLoginDate: Date;\n /** When the session was revoked / logged out (null while still active). */\n loggedOutAt?: Date | string | null;\n}\n","//#region ---- Identity provider entity model ----\n\n/**\n * Platform login IdP row (SecurityManagement.IdentityProvider).\n * Active/inactive uses the disable plugin field `isDisabled`.\n * Broker routing uses `key` as OAuth `acr_values`.\n */\nexport interface AXMIdentityProviderEntityModel {\n id: string;\n /** Stable key used by ListProviders and `/connect` (`google`, `okta-hr`, …). */\n key: string;\n title: string;\n icon?: string | null;\n /** External IdP authorize URL (e.g. Google accounts endpoint). */\n authorizationUrl?: string | null;\n /** External IdP token URL. */\n tokenUrl?: string | null;\n /** Optional userinfo URL when id_token is absent. */\n userInfoUrl?: string | null;\n /** Space-separated scopes requested from the external IdP. */\n scopes?: string | null;\n issuerUrl?: string | null;\n clientId?: string | null;\n /** Platform broker client secret (admin / seed). */\n clientSecret?: string | null;\n /** From disable plugin — `true` means not offered on login. */\n isDisabled?: boolean;\n priority: number;\n}\n\n//#endregion\n","import { AXPExpression } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\nexport interface AXMSecurityManagementPolicyEntityModel extends AXPEntityModel<string> {\n name: string;\n title: string;\n description?: string;\n\n rules: {\n conditions: AXPExpression;\n effects: AXMPolicyEffectRule[]; // list of effect rules\n }[];\n\n permission: string; // related permission\n scope: AXMPolicyScope;\n\n resource: {\n type: string;\n target: string;\n };\n}\n\nexport type AXMPolicyScope = 'system' | 'tenant' | 'user';\n\nexport type AXMPolicyEffect = 'editable' | 'readonly' | 'hidden' | 'immutable' | 'masked';\n\nexport interface AXMPolicyEffectRule {\n effect: AXMPolicyEffect;\n target: string;\n}\n\n// const glocbal_readonly_policy = {\n// name: 'readonly',\n// resource: {\n// reference: '*',\n// type: 'entity',\n// },\n// permission: 'readonly-policy',\n// scope: 'system',\n// rules: [\n// {\n// conditions: '{{ isHidden==true }}',\n// effects: [\n// {\n// target: '*',\n// effect: 'readonly',\n// },\n// ],\n// },\n// ],\n// } as AXMSecurityManagementPolicyEntityModel;\n\n// const readonly_file_by_role_policy = {\n// name: 'readonly_file_by_role_policy',\n// resource: {\n// type: 'entity',\n// reference: 'COntentManagement.Promotion',\n// },\n// permission: 'readonly-policy',\n// scope: 'system',\n// rules: [\n// {\n// conditions: '{{ createdDate > 2025-01-01 && user.role!=\"admin\"}}',\n// effects: [\n// {\n// target: 'imageId',\n// effect: 'readonly',\n// },\n// ],\n// },\n// ],\n// } as AXMSecurityManagementPolicyEntityModel;\n","//#region ----- RolePermission types -----\n\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n/**\n * Scoped permission grants for a Role.\n * Role rows are identity-only; all capability keys live here.\n */\nexport interface AXMSecurityManagementRolePermissionEntityModel extends AXPEntityModel<string> {\n /** Target {@link SecurityManagement.Role} id. */\n roleId: string;\n /** Capability keys granted for this scope. */\n permissions: string[];\n}\n\n//#endregion\n","//#region ----- UserRole types -----\n\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n/**\n * Scoped role assignments for a User.\n * User rows are identity-only for roles; all role memberships live here.\n */\nexport interface AXMSecurityManagementUserRoleEntityModel extends AXPEntityModel<string> {\n /** Target {@link SecurityManagement.User} id. */\n userId: string;\n /** Role ids granted for this scope. */\n roleIds: string[];\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './lib/context.definitions';\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './ROLE_PERMISSIONS_PAGE_COMPONENT_KEY';\nexport * from './USER_ROLES_PAGE_COMPONENT_KEY';\n\nexport * from './root-config';\n\nexport * from './AXM_USER_ACCESS_STATE_DEFINITION_KEY';\nexport * from './AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY';\nexport * from './user-access-state';\nexport * from './user-effective-state';\nexport * from './resolve-user-effective-state';\nexport * from './user-password-reset';\nexport * from './server-commands';\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-security-management-client-contracts.mjs","sources":["../../../../libs/modules/security-management/contracts/src/lib/context.definitions.ts","../../../../libs/modules/security-management/contracts/src/features.keys.ts","../../../../libs/modules/security-management/contracts/src/menu.keys.ts","../../../../libs/modules/security-management/contracts/src/permission.keys.ts","../../../../libs/modules/security-management/contracts/src/ROLE_PERMISSIONS_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/security-management/contracts/src/USER_ROLES_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/security-management/contracts/src/root-config.ts","../../../../libs/modules/security-management/contracts/src/AXM_USER_ACCESS_STATE_DEFINITION_KEY.ts","../../../../libs/modules/security-management/contracts/src/AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY.ts","../../../../libs/modules/security-management/contracts/src/user-access-state.ts","../../../../libs/modules/security-management/contracts/src/user-effective-state.ts","../../../../libs/modules/security-management/contracts/src/resolve-user-effective-state.ts","../../../../libs/modules/security-management/contracts/src/user-password-reset.ts","../../../../libs/modules/security-management/contracts/src/server-commands.ts","../../../../libs/modules/security-management/contracts/src/entities/device-sessions/device-sessions.types.ts","../../../../libs/modules/security-management/contracts/src/entities/identity-provider/identity-provider.types.ts","../../../../libs/modules/security-management/contracts/src/entities/policy/policy.types.ts","../../../../libs/modules/security-management/contracts/src/entities/role-permission/role-permission.types.ts","../../../../libs/modules/security-management/contracts/src/entities/user-role/user-role.types.ts","../../../../libs/modules/security-management/contracts/src/index.ts","../../../../libs/modules/security-management/contracts/src/acorex-platform-module-security-management-client-contracts.ts"],"sourcesContent":["import type { AXPContextDefinition } from '@acorex-platform/framework-shared/core';\n\n//#region ---- User context definitions ----\n\nexport const AXM_SECURITY_CONTEXT_DEFINITIONS: AXPContextDefinition[] = [\n {\n name: 'userDisplayName',\n title: 'User display name',\n description:\n 'Human-readable name of the signed-in user (name or title from session). Used for personalized responses.',\n order: 11,\n capabilities: ['ai'],\n },\n];\n\n//#endregion\n","//#region ---- Feature Keys ----\n\n/**\n * Security Management Module Feature Keys.\n * Defines all available features for the Security Management module.\n */\nexport const AXPSecurityManagementFeatureKeys = {\n ManageRoles: 'SecurityManagement:Feature:ManageRoles',\n ManageUsers: 'SecurityManagement:Feature:ManageUsers',\n MaxTotalUsers: 'SecurityManagement:Feature:MaxTotalUsers',\n ManageSessions: 'SecurityManagement:Feature:ManageSessions',\n ManagePolicies: 'SecurityManagement:Feature:ManagePolicies',\n /** Platform Console only — Identity Provider management menu + CRUD. */\n ManageIdentityProviders: 'SecurityManagement:Feature:ManageIdentityProviders',\n /** Self-service account deletion on the profile page. Off unless the edition enables it. */\n DeleteAccount: 'SecurityManagement:Feature:DeleteAccount',\n} as const;\n\n//#endregion\n\n","export const AXPSecurityManagementMenuKeys = {\n Root: 'SecurityManagement:Menu',\n Users: 'SecurityManagement:Menu:Users',\n Roles: 'SecurityManagement:Menu:Roles',\n DeviceSessions: 'SecurityManagement:Menu:DeviceSessions',\n Policy: 'SecurityManagement:Menu:Policy',\n IdentityProviders: 'SecurityManagement:Menu:IdentityProviders',\n MyProfile: 'SecurityManagement:Menu:MyProfile',\n} as const;\n","/**\n * Administration capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n /** Create and maintain users, roles, role assignments, and related security-access reports. */\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n ManageIntegrationActions: 'Administration:Permission:ManageIntegrationActions',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXPSecurityManagementPermissionKeys = {\n User: {\n Management: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n View: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Edit: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Delete: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Create: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n },\n Role: {\n Management: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n View: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Edit: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Delete: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n Create: AXPAdministrationPermissionKeys.MaintainUsersAndRoles,\n },\n DeviceSession: {\n Management: AXPAdministrationPermissionKeys.ManageSessions,\n View: AXPAdministrationPermissionKeys.ManageSessions,\n Terminate: AXPAdministrationPermissionKeys.ManageSessions,\n },\n Policy: {\n Management: AXPAdministrationPermissionKeys.MaintainPolicies,\n View: AXPAdministrationPermissionKeys.MaintainPolicies,\n Edit: AXPAdministrationPermissionKeys.MaintainPolicies,\n Delete: AXPAdministrationPermissionKeys.MaintainPolicies,\n Create: AXPAdministrationPermissionKeys.MaintainPolicies,\n },\n} as const;\n","/** Component key for the Role permissions page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const ROLE_PERMISSIONS_PAGE_COMPONENT_KEY = 'role-permissions-page';\n","export const USER_ROLES_PAGE_COMPONENT_KEY = 'user-roles-page';\n","const config = {\n i18n: 'security-management',\n profileEntity: 'Profile',\n};\nexport const RootConfig = {\n config,\n module: {\n route: 'security-management',\n name: 'SecurityManagement',\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-shield-halved',\n },\n entities: {\n policy: {\n name: 'Policy',\n title: `@${config.i18n}:policies.entities.policy.title`,\n titlePlural: `@${config.i18n}:policies.entities.policy.plural`,\n icon: 'fa-light fa-clipboard-list',\n },\n deviceSessions: {\n name: 'DeviceSessions',\n title: `@${config.i18n}:sessions.entities.session.title`,\n titlePlural: `@${config.i18n}:sessions.entities.session.plural`,\n icon: 'fa-light fa-laptop',\n },\n users: {\n name: 'User',\n title: `@${config.i18n}:users.entities.user.title`,\n titlePlural: `@${config.i18n}:users.entities.user.plural`,\n icon: 'fa-light fa-users',\n },\n roles: {\n name: 'Role',\n title: `@${config.i18n}:roles.entities.role.title`,\n titlePlural: `@${config.i18n}:roles.entities.role.plural`,\n icon: 'fa-light fa-user-tag',\n },\n rolePermission: {\n name: 'RolePermission',\n title: `@${config.i18n}:role-permissions.entities.role-permission.title`,\n titlePlural: `@${config.i18n}:role-permissions.entities.role-permission.plural`,\n icon: 'fa-light fa-key',\n },\n userRole: {\n name: 'UserRole',\n title: `@${config.i18n}:user-roles.entities.user-role.title`,\n titlePlural: `@${config.i18n}:user-roles.entities.user-role.plural`,\n icon: 'fa-light fa-user-tag',\n },\n profile: {\n name: 'Profile',\n title: `@${config.i18n}:profile.entities.profile.title`,\n titlePlural: `@${config.i18n}:profile.entities.profile.plural`,\n icon: 'fa-light fa-user',\n },\n identityProvider: {\n name: 'IdentityProvider',\n title: `@${config.i18n}:identity-providers.entities.identity-provider.title`,\n titlePlural: `@${config.i18n}:identity-providers.entities.identity-provider.plural`,\n icon: 'fa-light fa-id-badge',\n },\n },\n queries: {\n reports: {\n getUserEffectiveRolesHistory: 'SecurityManagement:Reports:GetUserEffectiveRolesHistory',\n getUserEffectivePermissionsHistory:\n 'SecurityManagement:Reports:GetUserEffectivePermissionsHistory',\n getRoleHoldersHistory: 'SecurityManagement:Reports:GetRoleHoldersHistory',\n getPermissionHoldersHistory: 'SecurityManagement:Reports:GetPermissionHoldersHistory',\n getUserPasswordChangeHistory: 'SecurityManagement:Reports:GetUserPasswordChangeHistory',\n },\n },\n} as const;\n","/** Status provider key for `accessState` on SecurityManagement.User (transitions define editable paths in the status UI). */\nexport const AXM_USER_ACCESS_STATE_DEFINITION_KEY = 'security-management.access-state.user';\n","/** Status provider key for persisted `effectiveState` on SecurityManagement.User (derived; read-only in UI). */\nexport const AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY = 'security-management.effective-state.user';\n","//#region ---- User access state ----\n\n/**\n * Read-only sign-in gate from the authentication layer (distinct from account `accountState`).\n * Persisted as the enum string value (e.g. `allowed`).\n */\nexport enum AXMUserAccessState {\n Allowed = 'allowed',\n Blocked = 'blocked',\n Expired = 'expired',\n}\n\n//#endregion\n","//#region ---- User effective (unified) state ----\n\n/**\n * Single operational state derived from account lifecycle and sign-in gate (persisted snapshot in mock/backend).\n */\nexport enum AXMUserEffectiveState {\n Pending = 'pending',\n Active = 'active',\n Suspended = 'suspended',\n Inactive = 'inactive',\n Archived = 'archived',\n SignInBlocked = 'sign-in-blocked',\n CredentialExpired = 'credential-expired',\n}\n\n//#endregion\n","import { AXMUserAccessState } from './user-access-state';\nimport { AXMUserEffectiveState } from './user-effective-state';\n\n//#region ---- Resolve effective state ----\n\nconst AccountLifecycleState = {\n Active: 'active',\n Archived: 'archived',\n Pending: 'pending',\n Inactive: 'inactive',\n Suspended: 'suspended',\n} as const;\n\n/**\n * Derives the unified operational state from account lifecycle and sign-in gate.\n * Used for persisted `effectiveState` on SecurityManagement.User.\n */\nexport function resolveAXMUserEffectiveState(input: {\n accountState: string | undefined;\n accessState: AXMUserAccessState | string | undefined;\n}): AXMUserEffectiveState {\n const lifecycle = input.accountState;\n const auth = (input.accessState ?? AXMUserAccessState.Allowed) as string;\n\n if (lifecycle === AccountLifecycleState.Archived) {\n return AXMUserEffectiveState.Archived;\n }\n if (lifecycle === AccountLifecycleState.Pending) {\n return AXMUserEffectiveState.Pending;\n }\n if (lifecycle === AccountLifecycleState.Inactive) {\n return AXMUserEffectiveState.Inactive;\n }\n if (lifecycle === AccountLifecycleState.Suspended) {\n return AXMUserEffectiveState.Suspended;\n }\n if (auth === AXMUserAccessState.Expired) {\n return AXMUserEffectiveState.CredentialExpired;\n }\n if (auth === AXMUserAccessState.Blocked) {\n return AXMUserEffectiveState.SignInBlocked;\n }\n if (lifecycle === AccountLifecycleState.Active) {\n return AXMUserEffectiveState.Active;\n }\n return AXMUserEffectiveState.Active;\n}\n\n//#endregion\n","//#region ---- Password reset payload on User ----\n\n/**\n * One-time password-reset token state stored as JSON on SecurityManagement.User.\n * The raw token is never persisted — only a SHA-256 hash.\n */\nexport interface AXMUserPasswordResetInfo {\n tokenHash: string;\n expiresAt: string;\n sentAt: string;\n}\n\n//#endregion\n","//#region ---- Security management server command keys ----\n\nexport const AXMSecurityManagementServerCommands = {\n SendPasswordResetEmail: 'SecurityManagement:Server:SendPasswordResetEmail',\n CompletePasswordReset: 'SecurityManagement:Server:CompletePasswordReset',\n ChangeOwnPassword: 'SecurityManagement:Server:ChangeOwnPassword',\n} as const;\n\n/** Stable codes for self-service password change (client maps to i18n). */\nexport const AXM_CHANGE_OWN_PASSWORD_ERROR_CODES = {\n NotSignedIn: 'CHANGE_OWN_PASSWORD_NOT_SIGNED_IN',\n IncorrectCurrent: 'CHANGE_OWN_PASSWORD_INCORRECT_CURRENT',\n SameAsCurrent: 'CHANGE_OWN_PASSWORD_SAME_AS_CURRENT',\n InvalidInput: 'CHANGE_OWN_PASSWORD_INVALID_INPUT',\n} as const;\n\n/** Client/UI action key (confirm dialog → server send). */\nexport const AXM_USER_SEND_PASSWORD_RESET_COMMAND = 'SecurityManagement:User:SendPasswordResetEmail';\n\nexport interface AXMSendPasswordResetEmailInput {\n /** Admin path: target user id. */\n userId?: string;\n /** Forgot path: email or username. */\n login?: string;\n /** Optional absolute web origin for reset link (defaults to env / localhost). */\n webOrigin?: string;\n}\n\nexport interface AXMCompletePasswordResetInput {\n token: string;\n newPassword: string;\n}\n\nexport interface AXMChangeOwnPasswordInput {\n currentPassword: string;\n newPassword: string;\n}\n\nexport interface AXMChangeOwnPasswordResult {\n passwordChangedAt: string;\n}\n\n//#endregion\n","import { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\nexport enum AXMSessionStatusTypes {\n revoked = 'revoked',\n expired = 'expired',\n active = 'active',\n}\n\nexport interface AXMSecurityManagementDeviceSessionsEntityModel extends AXPEntityModel<string> {\n clientName: string;\n ipAddress: string;\n userAgent: string;\n authorizationId: string;\n status: string;\n userId: string;\n user: {\n id: string;\n name: string;\n };\n applicationId: string;\n application: {\n id: string;\n name: string;\n };\n tenantId: string;\n tenant: {\n id: string;\n name: string;\n };\n isActiveSession: boolean;\n\n deviceName: string;\n operatingSystem: string;\n browser: string;\n location: string;\n lastLoginDate: Date;\n /** When the session was revoked / logged out (null while still active). */\n loggedOutAt?: Date | string | null;\n}\n","//#region ---- Identity provider entity model ----\n\n/**\n * Platform login IdP row (SecurityManagement.IdentityProvider).\n * Active/inactive uses the disable plugin field `isDisabled`.\n * Broker routing uses `key` as OAuth `acr_values`.\n */\nexport interface AXMIdentityProviderEntityModel {\n id: string;\n /** Stable key used by ListProviders and `/connect` (`google`, `okta-hr`, …). */\n key: string;\n title: string;\n icon?: string | null;\n /** External IdP authorize URL (e.g. Google accounts endpoint). */\n authorizationUrl?: string | null;\n /** External IdP token URL. */\n tokenUrl?: string | null;\n /** Optional userinfo URL when id_token is absent. */\n userInfoUrl?: string | null;\n /** Space-separated scopes requested from the external IdP. */\n scopes?: string | null;\n issuerUrl?: string | null;\n clientId?: string | null;\n /** Platform broker client secret (admin / seed). */\n clientSecret?: string | null;\n /** From disable plugin — `true` means not offered on login. */\n isDisabled?: boolean;\n priority: number;\n}\n\n//#endregion\n","import { AXPExpression } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\nexport interface AXMSecurityManagementPolicyEntityModel extends AXPEntityModel<string> {\n name: string;\n title: string;\n description?: string;\n\n rules: {\n conditions: AXPExpression;\n effects: AXMPolicyEffectRule[]; // list of effect rules\n }[];\n\n permission: string; // related permission\n scope: AXMPolicyScope;\n\n resource: {\n type: string;\n target: string;\n };\n}\n\nexport type AXMPolicyScope = 'system' | 'tenant' | 'user';\n\nexport type AXMPolicyEffect = 'editable' | 'readonly' | 'hidden' | 'immutable' | 'masked';\n\nexport interface AXMPolicyEffectRule {\n effect: AXMPolicyEffect;\n target: string;\n}\n\n// const glocbal_readonly_policy = {\n// name: 'readonly',\n// resource: {\n// reference: '*',\n// type: 'entity',\n// },\n// permission: 'readonly-policy',\n// scope: 'system',\n// rules: [\n// {\n// conditions: '{{ isHidden==true }}',\n// effects: [\n// {\n// target: '*',\n// effect: 'readonly',\n// },\n// ],\n// },\n// ],\n// } as AXMSecurityManagementPolicyEntityModel;\n\n// const readonly_file_by_role_policy = {\n// name: 'readonly_file_by_role_policy',\n// resource: {\n// type: 'entity',\n// reference: 'COntentManagement.Promotion',\n// },\n// permission: 'readonly-policy',\n// scope: 'system',\n// rules: [\n// {\n// conditions: '{{ createdDate > 2025-01-01 && user.role!=\"admin\"}}',\n// effects: [\n// {\n// target: 'imageId',\n// effect: 'readonly',\n// },\n// ],\n// },\n// ],\n// } as AXMSecurityManagementPolicyEntityModel;\n","//#region ----- RolePermission types -----\n\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n/**\n * Scoped permission grants for a Role.\n * Role rows are identity-only; all capability keys live here.\n */\nexport interface AXMSecurityManagementRolePermissionEntityModel extends AXPEntityModel<string> {\n /** Target {@link SecurityManagement.Role} id. */\n roleId: string;\n /** Capability keys granted for this scope. */\n permissions: string[];\n}\n\n//#endregion\n","//#region ----- UserRole types -----\n\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n/**\n * Scoped role assignments for a User.\n * User rows are identity-only for roles; all role memberships live here.\n */\nexport interface AXMSecurityManagementUserRoleEntityModel extends AXPEntityModel<string> {\n /** Target {@link SecurityManagement.User} id. */\n userId: string;\n /** Role ids granted for this scope. */\n roleIds: string[];\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './lib/context.definitions';\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './ROLE_PERMISSIONS_PAGE_COMPONENT_KEY';\nexport * from './USER_ROLES_PAGE_COMPONENT_KEY';\n\nexport * from './root-config';\n\nexport * from './AXM_USER_ACCESS_STATE_DEFINITION_KEY';\nexport * from './AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY';\nexport * from './user-access-state';\nexport * from './user-effective-state';\nexport * from './resolve-user-effective-state';\nexport * from './user-password-reset';\nexport * from './server-commands';\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|