@acorex-platform/module-security-management-client 0.0.15 → 0.0.18
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-contracts.mjs +163 -214
- package/fesm2022/acorex-platform-module-security-management-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-security-management-client-send-password-reset-email.command-DzfUvFk2.mjs +81 -0
- package/fesm2022/acorex-platform-module-security-management-client-send-password-reset-email.command-DzfUvFk2.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-security-management-client.mjs +10 -2
- package/fesm2022/acorex-platform-module-security-management-client.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-module-security-management-client-contracts.d.ts +48 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-security-management-client.mjs","sources":["../../../../libs/modules/security-management/client/src/lib/features/device-sessions/services/device-sessions.service.ts","../../../../libs/modules/security-management/client/src/lib/manifest.ts","../../../../libs/modules/security-management/client/src/lib/entity.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/datasources/users.datasource.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/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/context-definition.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/commands/assign-permissions.command.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","//#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 required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","\r\nimport { AXPEntity } from '@acorex-platform/framework-shared/entity';\nimport {\r\n AXPEntityDefinitionLoader,\r\n AXPEntityDefinitionPreloader,\r\n AXPEntityPreloadEntity,\r\n} from '@acorex-platform/framework-client/layout/entity';\r\nimport { Injectable } from '@angular/core';\r\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\r\n\r\n@Injectable()\r\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\r\n public preload(): AXPEntityPreloadEntity[] {\r\n const { entities, module } = RootConfig;\r\n return [entities.users.name, entities.roles.name, entities.deviceSessions.name].map((entity) => ({\r\n module: module.name,\r\n entity,\r\n }));\r\n }\r async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\r\n const { entities, module } = RootConfig;\r\n if (moduleName == module.name) {\r\n switch (entityName) {\r\n case RootConfig.entities.users.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).usersFactory();\r\n case RootConfig.entities.roles.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).rolesFactory();\r\n case RootConfig.entities.profile.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).profileFactory();\r\n case RootConfig.entities.deviceSessions.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).deviceSessionsFactory();\r\n case RootConfig.entities.policy.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).policyFactory();\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async list(): Promise<{ name: string; module: string }[]> {\r\n const m = RootConfig.module.name;\r\n return Promise.resolve(\r\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\r\n );\r\n }\r\n}\r\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}\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-client/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}","import { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex-platform/framework-client/core';\n\nimport { inject } from '@angular/core';\nimport { AXMSecurityManagementDataSourceKeys } from '@acorex-platform/module-security-management-client/contracts';\nexport class AXMUsersDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n protected userService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.users.name).data<any, any>();\n\n items(): Promise<AXPDataSourceDefinition[]> {\n return Promise.resolve([\n {\n name: AXMSecurityManagementDataSourceKeys.Users,\n title: 'Users',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (_) => {\n try {\n const res = await this.userService.query();\n return {\n items: res.items.map((item) => ({\n ...item,\n displayName: item.displayName,\n })),\n total: res.total,\n };\n } catch (e) {\n console.log(e);\n throw e;\n }\n },\n byKey: async (key: unknown) => {\n return await this.userService.byKey(key as string);\n },\n pageSize: 100,\n });\n },\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'uuid',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'displayName',\n title: `Display Name`,\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'username',\n title: `Username`,\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'username',\n title: 'Username',\n operator: {\n type: 'equal',\n },\n widget: {\n type: AXPWidgetsCatalog.text,\n },\n filterType: {\n advance: true,\n inline: true,\n },\n } as AXPFilterDefinition,\n ],\n textField: {\n name: 'displayName',\n title: 'Display Name',\n },\n valueField: {\n name: 'id',\n title: 'ID',\n },\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","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 { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSecurityManagementMenuKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSecurityManagementPermissionKeys } 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: [AXPSecurityManagementPermissionKeys.User.View],\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: [AXPSecurityManagementPermissionKeys.Role.View],\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: [AXPSecurityManagementPermissionKeys.DeviceSession.View],\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: [AXPSecurityManagementPermissionKeys.Policy.View],\n // },\n // },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex-platform/framework-client/auth';\nimport { Injectable } from '@angular/core';\nimport { AXPSecurityManagementPermissionKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n\n //#region ---- Define Method ----\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPSecurityManagementPermissionKeys;\n\n // I18n path constants\n const MODULE_PERMISSIONS = '@security-management:module.permissions';\n const USERS_PERMISSIONS = '@security-management:users.permissions';\n const ROLES_PERMISSIONS = '@security-management:roles.permissions';\n const SESSIONS_PERMISSIONS = '@security-management:sessions.permissions';\n const POLICIES_PERMISSIONS = '@security-management:policies.permissions';\n\n context\n .addGroup(\n RootConfig.module.name,\n `${MODULE_PERMISSIONS}.title`,\n `${MODULE_PERMISSIONS}.description`\n )\n //\n .addPermission(\n keys.User.Management,\n `${USERS_PERMISSIONS}.manage.title`,\n `${USERS_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.User.View,\n `${USERS_PERMISSIONS}.view.title`,\n `${USERS_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.User.Create,\n `${USERS_PERMISSIONS}.create.title`,\n `${USERS_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.User.Edit,\n `${USERS_PERMISSIONS}.edit.title`,\n `${USERS_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.User.Delete,\n `${USERS_PERMISSIONS}.delete.title`,\n `${USERS_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.Role.Management,\n `${ROLES_PERMISSIONS}.manage.title`,\n `${ROLES_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.Role.View,\n `${ROLES_PERMISSIONS}.view.title`,\n `${ROLES_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.Role.Create,\n `${ROLES_PERMISSIONS}.create.title`,\n `${ROLES_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Role.Edit,\n `${ROLES_PERMISSIONS}.edit.title`,\n `${ROLES_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Role.Delete,\n `${ROLES_PERMISSIONS}.delete.title`,\n `${ROLES_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.DeviceSession.Management,\n `${SESSIONS_PERMISSIONS}.manage.title`,\n `${SESSIONS_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.DeviceSession.View,\n `${SESSIONS_PERMISSIONS}.view.title`,\n `${SESSIONS_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.DeviceSession.Terminate,\n `${SESSIONS_PERMISSIONS}.terminate.title`,\n `${SESSIONS_PERMISSIONS}.terminate.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.Policy.Management,\n `${POLICIES_PERMISSIONS}.manage.title`,\n `${POLICIES_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.Policy.View,\n `${POLICIES_PERMISSIONS}.view.title`,\n `${POLICIES_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.Policy.Create,\n `${POLICIES_PERMISSIONS}.create.title`,\n `${POLICIES_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Policy.Edit,\n `${POLICIES_PERMISSIONS}.edit.title`,\n `${POLICIES_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Policy.Delete,\n `${POLICIES_PERMISSIONS}.delete.title`,\n `${POLICIES_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .endGroup();\n }\n\n //#endregion\n}\n\n//#endregion\n\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 { Injectable } from '@angular/core';\nimport type { AXPContextDefinition, AXPContextDefinitionProvider } from '@acorex-platform/framework-client/core';\n\n//#region ---- User context definitions ----\n\n@Injectable()\nexport class AXMSecurityManagementContextDefinitionProvider implements AXPContextDefinitionProvider {\n async items(): Promise<AXPContextDefinition[]> {\n return [\n {\n name: 'userId',\n title: 'User ID',\n description:\n 'Identifier of the signed-in user from the current session. Used to scope AI actions and audit to the active account.',\n ai: {\n promptLabel: 'User id',\n usageHint: 'Treat as the active user unless the request explicitly refers to another person.',\n valueKind: 'string',\n order: 10,\n },\n },\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 ai: {\n promptLabel: 'User display name',\n usageHint: 'Use for polite address; do not invent a different name.',\n valueKind: 'string',\n order: 11,\n },\n },\n ];\n }\n}\n\n//#endregion\n","import { AXP_CONTEXT_DEFINITION_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex-platform/framework-client/layout/entity';\nimport { NgModule } from '@angular/core';\nimport { SecurityManagementManifest } from './manifest';\nimport { 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 { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\n\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXMSecurityManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMPermissionsModule } from './features/permissions/permissions.module';\nimport { AXMSecurityManagementEvaluatorScopeProvider } from './features/security-evaluator-scope.provider';\nimport { AXMUsersDataSourceDefinition } from './features/shared/datasources/users.datasource';\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 { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\nimport { AXMSecurityManagementContextDefinitionProvider } from './context-definition.provider';\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 // 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 provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\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_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMUsersDataSourceDefinition,\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 ],\n})\nexport class AXMSecurityManagementModule {}\n","// #region ---------------- Imports ----------------\nimport {\n Component,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n input,\n output,\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 AXPSessionService,\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\ninterface PermissionSearchGroupResult {\n group: AXPPermissionGroupDefinition & { badge: string };\n items: MappedPermission[];\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 host: {\n class:\n 'axm-permissions-editor flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden',\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 /** Session service for checking module access */\n private sessionService = inject(AXPSessionService);\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 /** 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 */\n private mapPermissions(items: AXPPermissionDefinition[]): MappedPermission[] {\n return (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 }\n\n /**\n * Computed: Returns mapped permissions for the selected group.\n */\n protected items = computed(() => {\n const permissions = this.selectedGroup()?.permissions || [];\n return this.mapPermissions(permissions);\n });\n\n /**\n * Computed: Returns groups with badge counts, sorted by title.\n */\n protected groupsWithBadge = computed(() => {\n const groups = this.groups();\n const result = groups.map((group) => {\n return {\n ...group,\n badge: this.getBadge(group) || '',\n };\n });\n return result.sort((a, b) => a.title.localeCompare(b.title));\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 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 items: this.mapPermissions(\n this.getFilteredGroupPermissions(group, normalizedQuery),\n ),\n }))\n .filter((result) => !isEmpty(result.items));\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 * Extracts module name from a permission group name.\n * Handles multiple formats:\n * - Permission key format: 'SecurityManagement:Permission:SecurityManagement.Management' -> 'SecurityManagement'\n * - PascalCase: 'TenantManagement' -> 'TenantManagement'\n * - kebab-case: 'tenant-management' -> 'TenantManagement' (converts to PascalCase)\n */\n private extractModuleNameFromGroupName(groupName: string): string {\n // If it contains ':', extract the first part (permission key format)\n if (groupName.includes(':')) {\n const parts = groupName.split(':');\n return parts[0];\n }\n\n // If it's kebab-case, convert to PascalCase\n if (groupName.includes('-')) {\n return groupName\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n }\n\n // Otherwise, assume it's already PascalCase\n return groupName;\n }\n\n /**\n * Filters permission groups to only include those from enabled modules.\n */\n private filterGroupsByEnabledModules(\n groups: AXPPermissionGroupDefinition[],\n ): AXPPermissionGroupDefinition[] {\n return groups.filter((group) => {\n const moduleName = this.extractModuleNameFromGroupName(group.name);\n return this.sessionService.isModuleEnabled(moduleName);\n });\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 group (all selected permissions, including parents).\n */\n private getBadge(group: AXPPermissionGroupDefinition): string {\n const allNames = this.collectAllPermissionNames(group.permissions || []);\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 /**\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 group if available\n if (filteredGroups.length > 0) {\n this.selectedGroup.set(filteredGroups[0]);\n }\n\n this.selectedPermissions.set(this.getInitialPermissions());\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","@if (isEditorLoading()) {\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} @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 <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 flex-col\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group\">\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 p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: result.items }\n \"\n ></ng-container>\n </ul>\n </div>\n </section>\n }\n </div>\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 } @else {\n <div class=\"__groups w-2/5 p-4\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"(group.title | translate | async)!\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n @if (badgeToNumber(group.badge) > 0) {\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\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\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest\">\n <span>{{ selectedGroup()?.title! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"\n ></ng-container>\n </ul>\n </div>\n </div>\n }\n </div>\n}\n\n@if (isShowActions()) {\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<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item py-1 ps-2\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n {{ item.title | translate | async }}\n @if (item.description) {\n <i\n class=\"ps-2 text-xs fa-light fa-circle-info\"\n [title]=\"(item.description | translate | async) ?? ''\"\n ></i>\n }\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 { AXPCommand } 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, AXPRefreshEvent, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPExecuteCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityModifyEvent } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPWorkflowEventService } from '@acorex-platform/framework-client/workflow';\n\nimport { Injectable, inject } from '@angular/core';\nimport { isArray, isEmpty, isString } from 'lodash-es';\n\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAssignPermissionsCommandInput {\n __context__?: {\n data?: Record<string, unknown>;\n entity?: string;\n entityInfo?: {\n name?: string;\n module?: string;\n title?: string;\n parentKey?: string;\n source?: string;\n };\n options?: unknown;\n };\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 entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly toastService = inject(AXToastService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly workflowEventService = inject(AXPWorkflowEventService);\n\n //#endregion\n\n //#region ---- Execute ----\n\n async execute(input: AXMAssignPermissionsCommandInput): Promise<AXPExecuteCommandResult<string[] | null>> {\n try {\n const role = input.__context__?.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 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 = isArray(role['permissions']) ? (role['permissions'] as string[]) : [];\n\n const popupResult = await this.popupService.open(component, {\n title: roleTitle ? `${editorTitle} - ${roleTitle}` : editorTitle,\n size: 'md',\n data: {\n initialPermissions,\n showActions: true,\n },\n });\n\n const permissions = popupResult?.data;\n if (!isArray(permissions)) {\n return { success: true, data: null, metadata: { refresh: false } };\n }\n\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.roles.name}`;\n const [moduleName, entityName] = entityKey.split('.');\n const entityRef = await this.entityRegistry.resolve(moduleName, entityName);\n const updatePayload = {\n ...role,\n permissions,\n };\n\n const updated = await (entityRef.commands?.update?.execute as (data: Record<string, unknown>) => Promise<Record<string, unknown>>)(\n updatePayload,\n );\n\n await this.showSuccessToast();\n this.workflowEventService.dispatch(AXPEntityModifyEvent({ entity: entityKey, values: updated }));\n this.workflowEventService.dispatch(AXPRefreshEvent({ entity: entityKey }));\n\n return {\n success: true,\n data: permissions,\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","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 __context__: {\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 __context__: {\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';\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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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-security-management-client.mjs","sources":["../../../../libs/modules/security-management/client/src/lib/features/device-sessions/services/device-sessions.service.ts","../../../../libs/modules/security-management/client/src/lib/manifest.ts","../../../../libs/modules/security-management/client/src/lib/entity.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/datasources/users.datasource.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/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/context-definition.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/commands/assign-permissions.command.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","//#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 required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","\r\nimport { AXPEntity } from '@acorex-platform/framework-shared/entity';\nimport {\r\n AXPEntityDefinitionLoader,\r\n AXPEntityDefinitionPreloader,\r\n AXPEntityPreloadEntity,\r\n} from '@acorex-platform/framework-client/layout/entity';\r\nimport { Injectable } from '@angular/core';\r\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\r\n\r\n@Injectable()\r\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\r\n public preload(): AXPEntityPreloadEntity[] {\r\n const { entities, module } = RootConfig;\r\n return [entities.users.name, entities.roles.name, entities.deviceSessions.name].map((entity) => ({\r\n module: module.name,\r\n entity,\r\n }));\r\n }\r async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\r\n const { entities, module } = RootConfig;\r\n if (moduleName == module.name) {\r\n switch (entityName) {\r\n case RootConfig.entities.users.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).usersFactory();\r\n case RootConfig.entities.roles.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).rolesFactory();\r\n case RootConfig.entities.profile.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).profileFactory();\r\n case RootConfig.entities.deviceSessions.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).deviceSessionsFactory();\r\n case RootConfig.entities.policy.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).policyFactory();\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async list(): Promise<{ name: string; module: string }[]> {\r\n const m = RootConfig.module.name;\r\n return Promise.resolve(\r\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\r\n );\r\n }\r\n}\r\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}\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}","import { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex-platform/framework-client/core';\n\nimport { inject } from '@angular/core';\nimport { AXMSecurityManagementDataSourceKeys } from '@acorex-platform/module-security-management-client/contracts';\nexport class AXMUsersDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n protected userService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.users.name).data<any, any>();\n\n items(): Promise<AXPDataSourceDefinition[]> {\n return Promise.resolve([\n {\n name: AXMSecurityManagementDataSourceKeys.Users,\n title: 'Users',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (_) => {\n try {\n const res = await this.userService.query();\n return {\n items: res.items.map((item) => ({\n ...item,\n displayName: item.displayName,\n })),\n total: res.total,\n };\n } catch (e) {\n console.log(e);\n throw e;\n }\n },\n byKey: async (key: unknown) => {\n return await this.userService.byKey(key as string);\n },\n pageSize: 100,\n });\n },\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'uuid',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'displayName',\n title: `Display Name`,\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'username',\n title: `Username`,\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'username',\n title: 'Username',\n operator: {\n type: 'equal',\n },\n widget: {\n type: AXPWidgetsCatalog.text,\n },\n filterType: {\n advance: true,\n inline: true,\n },\n } as AXPFilterDefinition,\n ],\n textField: {\n name: 'displayName',\n title: 'Display Name',\n },\n valueField: {\n name: 'id',\n title: 'ID',\n },\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","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 { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSecurityManagementMenuKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSecurityManagementPermissionKeys } 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: [AXPSecurityManagementPermissionKeys.User.View],\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: [AXPSecurityManagementPermissionKeys.Role.View],\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: [AXPSecurityManagementPermissionKeys.DeviceSession.View],\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: [AXPSecurityManagementPermissionKeys.Policy.View],\n // },\n // },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex-platform/framework-client/auth';\nimport { Injectable } from '@angular/core';\nimport { AXPSecurityManagementPermissionKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n\n //#region ---- Define Method ----\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPSecurityManagementPermissionKeys;\n\n // I18n path constants\n const MODULE_PERMISSIONS = '@security-management:module.permissions';\n const USERS_PERMISSIONS = '@security-management:users.permissions';\n const ROLES_PERMISSIONS = '@security-management:roles.permissions';\n const SESSIONS_PERMISSIONS = '@security-management:sessions.permissions';\n const POLICIES_PERMISSIONS = '@security-management:policies.permissions';\n\n context\n .addGroup(\n RootConfig.module.name,\n `${MODULE_PERMISSIONS}.title`,\n `${MODULE_PERMISSIONS}.description`\n )\n //\n .addPermission(\n keys.User.Management,\n `${USERS_PERMISSIONS}.manage.title`,\n `${USERS_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.User.View,\n `${USERS_PERMISSIONS}.view.title`,\n `${USERS_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.User.Create,\n `${USERS_PERMISSIONS}.create.title`,\n `${USERS_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.User.Edit,\n `${USERS_PERMISSIONS}.edit.title`,\n `${USERS_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.User.Delete,\n `${USERS_PERMISSIONS}.delete.title`,\n `${USERS_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.Role.Management,\n `${ROLES_PERMISSIONS}.manage.title`,\n `${ROLES_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.Role.View,\n `${ROLES_PERMISSIONS}.view.title`,\n `${ROLES_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.Role.Create,\n `${ROLES_PERMISSIONS}.create.title`,\n `${ROLES_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Role.Edit,\n `${ROLES_PERMISSIONS}.edit.title`,\n `${ROLES_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Role.Delete,\n `${ROLES_PERMISSIONS}.delete.title`,\n `${ROLES_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.DeviceSession.Management,\n `${SESSIONS_PERMISSIONS}.manage.title`,\n `${SESSIONS_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.DeviceSession.View,\n `${SESSIONS_PERMISSIONS}.view.title`,\n `${SESSIONS_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.DeviceSession.Terminate,\n `${SESSIONS_PERMISSIONS}.terminate.title`,\n `${SESSIONS_PERMISSIONS}.terminate.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.Policy.Management,\n `${POLICIES_PERMISSIONS}.manage.title`,\n `${POLICIES_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.Policy.View,\n `${POLICIES_PERMISSIONS}.view.title`,\n `${POLICIES_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.Policy.Create,\n `${POLICIES_PERMISSIONS}.create.title`,\n `${POLICIES_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Policy.Edit,\n `${POLICIES_PERMISSIONS}.edit.title`,\n `${POLICIES_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Policy.Delete,\n `${POLICIES_PERMISSIONS}.delete.title`,\n `${POLICIES_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .endGroup();\n }\n\n //#endregion\n}\n\n//#endregion\n\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 { Injectable } from '@angular/core';\nimport type { AXPContextDefinition, AXPContextDefinitionProvider } from '@acorex-platform/framework-client/core';\n\n//#region ---- User context definitions ----\n\n@Injectable()\nexport class AXMSecurityManagementContextDefinitionProvider implements AXPContextDefinitionProvider {\n async items(): Promise<AXPContextDefinition[]> {\n return [\n {\n name: 'userId',\n title: 'User ID',\n description:\n 'Identifier of the signed-in user from the current session. Used to scope AI actions and audit to the active account.',\n ai: {\n promptLabel: 'User id',\n usageHint: 'Treat as the active user unless the request explicitly refers to another person.',\n valueKind: 'string',\n order: 10,\n },\n },\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 ai: {\n promptLabel: 'User display name',\n usageHint: 'Use for polite address; do not invent a different name.',\n valueKind: 'string',\n order: 11,\n },\n },\n ];\n }\n}\n\n//#endregion\n","import { AXP_CONTEXT_DEFINITION_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex-platform/framework-client/layout/entity';\nimport { NgModule } from '@angular/core';\nimport { SecurityManagementManifest } from './manifest';\nimport { 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 { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\n\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXMSecurityManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMPermissionsModule } from './features/permissions/permissions.module';\nimport { AXMSecurityManagementEvaluatorScopeProvider } from './features/security-evaluator-scope.provider';\nimport { AXMUsersDataSourceDefinition } from './features/shared/datasources/users.datasource';\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 { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\nimport { AXMSecurityManagementContextDefinitionProvider } from './context-definition.provider';\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 // 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 provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\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_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMUsersDataSourceDefinition,\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} 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 AXPSessionService,\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\ninterface PermissionSearchGroupResult {\n group: AXPPermissionGroupDefinition & { badge: string };\n items: MappedPermission[];\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 host: {\n class:\n 'axm-permissions-editor flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden',\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 /** Session service for checking module access */\n private sessionService = inject(AXPSessionService);\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 /** 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 */\n private mapPermissions(items: AXPPermissionDefinition[]): MappedPermission[] {\n return (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 }\n\n /**\n * Computed: Returns mapped permissions for the selected group.\n */\n protected items = computed(() => {\n const permissions = this.selectedGroup()?.permissions || [];\n return this.mapPermissions(permissions);\n });\n\n /**\n * Computed: Returns groups with badge counts, sorted by title.\n */\n protected groupsWithBadge = computed(() => {\n const groups = this.groups();\n const result = groups.map((group) => {\n return {\n ...group,\n badge: this.getBadge(group) || '',\n };\n });\n return result.sort((a, b) => a.title.localeCompare(b.title));\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 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 items: this.mapPermissions(\n this.getFilteredGroupPermissions(group, normalizedQuery),\n ),\n }))\n .filter((result) => !isEmpty(result.items));\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 * Extracts module name from a permission group name.\n * Handles multiple formats:\n * - Permission key format: 'SecurityManagement:Permission:SecurityManagement.Management' -> 'SecurityManagement'\n * - PascalCase: 'TenantManagement' -> 'TenantManagement'\n * - kebab-case: 'tenant-management' -> 'TenantManagement' (converts to PascalCase)\n */\n private extractModuleNameFromGroupName(groupName: string): string {\n // If it contains ':', extract the first part (permission key format)\n if (groupName.includes(':')) {\n const parts = groupName.split(':');\n return parts[0];\n }\n\n // If it's kebab-case, convert to PascalCase\n if (groupName.includes('-')) {\n return groupName\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n }\n\n // Otherwise, assume it's already PascalCase\n return groupName;\n }\n\n /**\n * Filters permission groups to only include those from enabled modules.\n */\n private filterGroupsByEnabledModules(\n groups: AXPPermissionGroupDefinition[],\n ): AXPPermissionGroupDefinition[] {\n return groups.filter((group) => {\n const moduleName = this.extractModuleNameFromGroupName(group.name);\n return this.sessionService.isModuleEnabled(moduleName);\n });\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 group (all selected permissions, including parents).\n */\n private getBadge(group: AXPPermissionGroupDefinition): string {\n const allNames = this.collectAllPermissionNames(group.permissions || []);\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 /**\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 group if available\n if (filteredGroups.length > 0) {\n this.selectedGroup.set(filteredGroups[0]);\n }\n\n this.selectedPermissions.set(this.getInitialPermissions());\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","@if (isEditorLoading()) {\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} @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 <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 flex-col\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group\">\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 p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: result.items }\n \"\n ></ng-container>\n </ul>\n </div>\n </section>\n }\n </div>\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 } @else {\n <div class=\"__groups w-2/5 p-4\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"(group.title | translate | async)!\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n @if (badgeToNumber(group.badge) > 0) {\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\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\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest\">\n <span>{{ selectedGroup()?.title! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"\n ></ng-container>\n </ul>\n </div>\n </div>\n }\n </div>\n}\n\n@if (isShowActions()) {\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<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item py-1 ps-2\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n {{ item.title | translate | async }}\n @if (item.description) {\n <i\n class=\"ps-2 text-xs fa-light fa-circle-info\"\n [title]=\"(item.description | translate | async) ?? ''\"\n ></i>\n }\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 { AXPCommand } 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, AXPRefreshEvent, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPExecuteCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityModifyEvent } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPWorkflowEventService } from '@acorex-platform/framework-client/workflow';\n\nimport { Injectable, inject } from '@angular/core';\nimport { isArray, isEmpty, isString } from 'lodash-es';\n\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAssignPermissionsCommandInput {\n __context__?: {\n data?: Record<string, unknown>;\n entity?: string;\n entityInfo?: {\n name?: string;\n module?: string;\n title?: string;\n parentKey?: string;\n source?: string;\n };\n options?: unknown;\n };\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 entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly toastService = inject(AXToastService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly workflowEventService = inject(AXPWorkflowEventService);\n\n //#endregion\n\n //#region ---- Execute ----\n\n async execute(input: AXMAssignPermissionsCommandInput): Promise<AXPExecuteCommandResult<string[] | null>> {\n try {\n const role = input.__context__?.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 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 = isArray(role['permissions']) ? (role['permissions'] as string[]) : [];\n\n const popupResult = await this.popupService.open(component, {\n title: roleTitle ? `${editorTitle} - ${roleTitle}` : editorTitle,\n size: 'md',\n data: {\n initialPermissions,\n showActions: true,\n },\n });\n\n const permissions = popupResult?.data;\n if (!isArray(permissions)) {\n return { success: true, data: null, metadata: { refresh: false } };\n }\n\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.roles.name}`;\n const [moduleName, entityName] = entityKey.split('.');\n const entityRef = await this.entityRegistry.resolve(moduleName, entityName);\n const updatePayload = {\n ...role,\n permissions,\n };\n\n const updated = await (entityRef.commands?.update?.execute as (data: Record<string, unknown>) => Promise<Record<string, unknown>>)(\n updatePayload,\n );\n\n await this.showSuccessToast();\n this.workflowEventService.dispatch(AXPEntityModifyEvent({ entity: entityKey, values: updated }));\n this.workflowEventService.dispatch(AXPRefreshEvent({ entity: entityKey }));\n\n return {\n success: true,\n data: permissions,\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","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 __context__: {\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 __context__: {\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';\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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"}
|