@acorex-platform/module-security-management-client 0.0.61 → 0.0.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-B61j_cJF.mjs → acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-CDoovNa6.mjs} +14 -22
- package/fesm2022/acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-CDoovNa6.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-security-management-client-approve-join-request.command-BSvK59LV.mjs → acorex-platform-module-security-management-client-approve-join-request.command-pfC6Bixs.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-security-management-client-approve-join-request.command-BSvK59LV.mjs.map → acorex-platform-module-security-management-client-approve-join-request.command-pfC6Bixs.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-security-management-client-contracts.mjs +8 -7
- package/fesm2022/acorex-platform-module-security-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-security-management-client-create-user-in-tenant.command-BFnZRmh9.mjs → acorex-platform-module-security-management-client-create-user-in-tenant.command-BvvmKgH5.mjs} +4 -4
- package/fesm2022/acorex-platform-module-security-management-client-create-user-in-tenant.command-BvvmKgH5.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-security-management-client-index-B6qo6qLT.mjs → acorex-platform-module-security-management-client-index-BPhBTng_.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-security-management-client-index-B6qo6qLT.mjs.map → acorex-platform-module-security-management-client-index-BPhBTng_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-security-management-client-invite-user.command-ClQ6WxxN.mjs → acorex-platform-module-security-management-client-invite-user.command-DINcxhcA.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-security-management-client-invite-user.command-ClQ6WxxN.mjs.map → acorex-platform-module-security-management-client-invite-user.command-DINcxhcA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-security-management-client-user-role-grant.service-6U17jzjq.mjs → acorex-platform-module-security-management-client-user-role-grant.service-Dw4FWcEa.mjs} +9 -8
- package/fesm2022/acorex-platform-module-security-management-client-user-role-grant.service-Dw4FWcEa.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-security-management-client.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-B61j_cJF.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-security-management-client-create-user-in-tenant.command-BFnZRmh9.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-security-management-client-user-role-grant.service-6U17jzjq.mjs.map +0 -1
|
@@ -10,7 +10,7 @@ import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
|
10
10
|
import { RootConfig, AXP_DEVICE_SESSION_TENANT_SESSIONS_VIEW, AXP_DEVICE_SESSION_ADMIN_SCOPE_PARAM, AXP_DEVICE_SESSION_ADMIN_SCOPE_HEADER, AXPSecurityManagementFeatureKeys, AXM_USER_ACCESS_STATE_DEFINITION_KEY, AXMUserAccessState, AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY, AXMUserEffectiveState, AXPSecurityManagementMenuKeys, AXPAdministrationPermissionKeys, isUserProvisioningListAction, userProvisioningListActions, ROLE_PERMISSIONS_PAGE_COMPONENT_KEY } from '@acorex-platform/module-security-management-client/contracts';
|
|
11
11
|
import { Router } from '@angular/router';
|
|
12
12
|
import { AXM_SECURITY_CONTEXT_DEFINITIONS } from '@acorex-platform/module-security-management-client/contracts';
|
|
13
|
-
import { AXPWidgetsList, AXPStatusProvider, AXPSystemStatusType } from '@acorex-platform/framework-shared/core';
|
|
13
|
+
import { AXPWidgetsList, AXPStatusProvider, AXPSystemStatusType, coerceUnknownToTrimmedString } from '@acorex-platform/framework-shared/core';
|
|
14
14
|
import { AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER, AXPValueWidgetComponent, AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
|
|
15
15
|
import { AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';
|
|
16
16
|
import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';
|
|
@@ -706,19 +706,11 @@ class AXMUserStatusProvider extends AXPStatusProvider {
|
|
|
706
706
|
}
|
|
707
707
|
//#endregion
|
|
708
708
|
|
|
709
|
-
/** TM Standard edition — Administration uses Tenant Users / Sessions instead of Security. */
|
|
710
|
-
const TENANT_CONSOLE_FEATURE = 'TenantManagement:Feature:TenantConsole';
|
|
711
709
|
class AXMMenuProvider {
|
|
712
710
|
constructor() {
|
|
713
711
|
this.entityService = inject(AXPEntityService);
|
|
714
|
-
this.sessionService = inject(AXPSessionService);
|
|
715
712
|
}
|
|
716
713
|
async provide(context) {
|
|
717
|
-
// TM application: hide application-scoped Security (Users / Roles / Sessions).
|
|
718
|
-
// Tenant-wide menus come from TenantManagement menu provider.
|
|
719
|
-
if (this.sessionService.isFeatureEnabled(TENANT_CONSOLE_FEATURE)) {
|
|
720
|
-
return;
|
|
721
|
-
}
|
|
722
714
|
const moduleName = RootConfig.module.name;
|
|
723
715
|
// Check if Security submenu exists under Administration, create it if not
|
|
724
716
|
const securityMenu = context.find(AXPSecurityManagementMenuKeys.Root);
|
|
@@ -918,7 +910,7 @@ class AXMSecurityManagementModule {
|
|
|
918
910
|
multi: true,
|
|
919
911
|
},
|
|
920
912
|
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return index; }).then((m) => m.AXMRolePermissionsPageComponentProvider)),
|
|
921
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-
|
|
913
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-BPhBTng_.mjs').then((m) => m.AXMUserRolesPageComponentProvider)),
|
|
922
914
|
// Provider references (now using tokens)
|
|
923
915
|
{
|
|
924
916
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
@@ -981,11 +973,11 @@ class AXMSecurityManagementModule {
|
|
|
981
973
|
},
|
|
982
974
|
{
|
|
983
975
|
key: 'SecurityManagement:User:Invite',
|
|
984
|
-
command: () => import('./acorex-platform-module-security-management-client-invite-user.command-
|
|
976
|
+
command: () => import('./acorex-platform-module-security-management-client-invite-user.command-DINcxhcA.mjs').then((c) => c.AXPInviteUserCommand),
|
|
985
977
|
},
|
|
986
978
|
{
|
|
987
979
|
key: 'SecurityManagement:User:CreateInTenant',
|
|
988
|
-
command: () => import('./acorex-platform-module-security-management-client-create-user-in-tenant.command-
|
|
980
|
+
command: () => import('./acorex-platform-module-security-management-client-create-user-in-tenant.command-BvvmKgH5.mjs').then((c) => c.AXPCreateUserInTenantCommand),
|
|
989
981
|
},
|
|
990
982
|
{
|
|
991
983
|
key: 'SecurityManagement:User:ResendInvitation',
|
|
@@ -997,7 +989,7 @@ class AXMSecurityManagementModule {
|
|
|
997
989
|
},
|
|
998
990
|
{
|
|
999
991
|
key: 'SecurityManagement:User:ApproveJoinRequest',
|
|
1000
|
-
command: () => import('./acorex-platform-module-security-management-client-approve-join-request.command-
|
|
992
|
+
command: () => import('./acorex-platform-module-security-management-client-approve-join-request.command-pfC6Bixs.mjs').then((c) => c.AXPApproveJoinRequestCommand),
|
|
1001
993
|
},
|
|
1002
994
|
{
|
|
1003
995
|
key: 'SecurityManagement:User:RejectJoinRequest',
|
|
@@ -1037,7 +1029,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1037
1029
|
multi: true,
|
|
1038
1030
|
},
|
|
1039
1031
|
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return index; }).then((m) => m.AXMRolePermissionsPageComponentProvider)),
|
|
1040
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-
|
|
1032
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-security-management-client-index-BPhBTng_.mjs').then((m) => m.AXMUserRolesPageComponentProvider)),
|
|
1041
1033
|
// Provider references (now using tokens)
|
|
1042
1034
|
{
|
|
1043
1035
|
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
@@ -1100,11 +1092,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1100
1092
|
},
|
|
1101
1093
|
{
|
|
1102
1094
|
key: 'SecurityManagement:User:Invite',
|
|
1103
|
-
command: () => import('./acorex-platform-module-security-management-client-invite-user.command-
|
|
1095
|
+
command: () => import('./acorex-platform-module-security-management-client-invite-user.command-DINcxhcA.mjs').then((c) => c.AXPInviteUserCommand),
|
|
1104
1096
|
},
|
|
1105
1097
|
{
|
|
1106
1098
|
key: 'SecurityManagement:User:CreateInTenant',
|
|
1107
|
-
command: () => import('./acorex-platform-module-security-management-client-create-user-in-tenant.command-
|
|
1099
|
+
command: () => import('./acorex-platform-module-security-management-client-create-user-in-tenant.command-BvvmKgH5.mjs').then((c) => c.AXPCreateUserInTenantCommand),
|
|
1108
1100
|
},
|
|
1109
1101
|
{
|
|
1110
1102
|
key: 'SecurityManagement:User:ResendInvitation',
|
|
@@ -1116,7 +1108,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1116
1108
|
},
|
|
1117
1109
|
{
|
|
1118
1110
|
key: 'SecurityManagement:User:ApproveJoinRequest',
|
|
1119
|
-
command: () => import('./acorex-platform-module-security-management-client-approve-join-request.command-
|
|
1111
|
+
command: () => import('./acorex-platform-module-security-management-client-approve-join-request.command-pfC6Bixs.mjs').then((c) => c.AXPApproveJoinRequestCommand),
|
|
1120
1112
|
},
|
|
1121
1113
|
{
|
|
1122
1114
|
key: 'SecurityManagement:User:RejectJoinRequest',
|
|
@@ -1652,13 +1644,13 @@ class AXMRolePermissionGrantService {
|
|
|
1652
1644
|
//#endregion
|
|
1653
1645
|
//#region ----- Scope -----
|
|
1654
1646
|
resolveSessionScope() {
|
|
1655
|
-
const tenantId = this.sessionService.tenant?.id;
|
|
1647
|
+
const tenantId = coerceUnknownToTrimmedString(this.sessionService.tenant?.id);
|
|
1656
1648
|
if (!tenantId) {
|
|
1657
1649
|
return null;
|
|
1658
1650
|
}
|
|
1659
1651
|
return {
|
|
1660
1652
|
tenantId,
|
|
1661
|
-
applicationId: this.sessionService.application?.id,
|
|
1653
|
+
applicationId: coerceUnknownToTrimmedString(this.sessionService.application?.id) || undefined,
|
|
1662
1654
|
};
|
|
1663
1655
|
}
|
|
1664
1656
|
//#endregion
|
|
@@ -1685,12 +1677,12 @@ class AXMRolePermissionGrantService {
|
|
|
1685
1677
|
return null;
|
|
1686
1678
|
}
|
|
1687
1679
|
if (applicationId) {
|
|
1688
|
-
const appMatch = items.find((item) => item.scopeInfo?.applicationId === applicationId);
|
|
1680
|
+
const appMatch = items.find((item) => coerceUnknownToTrimmedString(item.scopeInfo?.applicationId) === applicationId);
|
|
1689
1681
|
if (appMatch) {
|
|
1690
1682
|
return appMatch;
|
|
1691
1683
|
}
|
|
1692
1684
|
}
|
|
1693
|
-
const tenantWide = items.find((item) => !item.scopeInfo?.applicationId);
|
|
1685
|
+
const tenantWide = items.find((item) => !coerceUnknownToTrimmedString(item.scopeInfo?.applicationId));
|
|
1694
1686
|
return tenantWide ?? items[0] ?? null;
|
|
1695
1687
|
}
|
|
1696
1688
|
//#endregion
|
|
@@ -2377,4 +2369,4 @@ var permissionsWidgetColumn_component = /*#__PURE__*/Object.freeze({
|
|
|
2377
2369
|
*/
|
|
2378
2370
|
|
|
2379
2371
|
export { AXMAssignPermissionsCommand as A, AXMDeviceSessionsService as a, AXMPermissionsModule as b, AXMRolePermissionGrantService as c, AXMRolePermissionsPageComponent as d, AXMRolePermissionsPageComponentProvider as e, AXMSecurityManagementModule as f, AXPPermissionsEditorComponent as g, AXPPermissionsWidget as h, AXPPermissionsWidgetColumnComponent as i, AXPPermissionsWidgetEditComponent as j, AXPPermissionsWidgetViewComponent as k, resolvePersistedEntityId as r };
|
|
2380
|
-
//# sourceMappingURL=acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-
|
|
2372
|
+
//# sourceMappingURL=acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-CDoovNa6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-CDoovNa6.mjs","sources":["../../../../libs/modules/security-management/client/src/lib/features/device-sessions/services/device-sessions.service.ts","../../../../libs/modules/security-management/client/src/lib/middlewares/device-sessions-admin-scope.util.ts","../../../../libs/modules/security-management/client/src/lib/middlewares/device-sessions-admin-scope.interceptor.ts","../../../../libs/modules/security-management/client/src/lib/middlewares/device-sessions-admin-scope.middleware.ts","../../../../libs/modules/security-management/client/src/lib/context-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget.config.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/widget-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions.module.ts","../../../../libs/modules/security-management/client/src/lib/features/security-evaluator-scope.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-access-state.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-effective-state.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-invitation-status.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/user-provisioning.entity-modifier.ts","../../../../libs/modules/security-management/client/src/lib/security-management.module.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-editor/permissions-editor.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-editor/permissions-editor.component.html","../../../../libs/modules/security-management/client/src/lib/features/permissions/role-permission-grant.service.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/commands/assign-permissions.command.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/resolve-persisted-entity-id.util.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/pages/role-permissions-page/role-permissions-page.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/pages/role-permissions-page/role-permissions-page.component.html","../../../../libs/modules/security-management/client/src/lib/features/permissions/pages/role-permissions-page/role-permissions-page-component.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-view.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-edit.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-column.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/index.ts","../../../../libs/modules/security-management/client/src/acorex-platform-module-security-management-client.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n//#region ---- Device Sessions Service ----\n\n/**\n * Terminates device sessions for the current or specified session.\n * Implementations are provided by connectivity layers (e.g. API: AXCDeviceSessionService).\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 {\n AXP_DEVICE_SESSION_ADMIN_SCOPE_PARAM,\n AXP_DEVICE_SESSION_TENANT_SESSIONS_VIEW,\n RootConfig,\n type AXPDeviceSessionAdminScope,\n} from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ----- Device Sessions admin scope (client) -----\n\nexport const DEVICE_SESSIONS_ENTITY_NAME = `${RootConfig.module.name}.${RootConfig.entities.deviceSessions.name}`;\n\n/** Resolve admin scope from the entity list route (`?view=tenant-sessions`). */\nexport function resolveDeviceSessionAdminScopeFromUrl(\n url: string | null | undefined,\n): AXPDeviceSessionAdminScope {\n if (!url) {\n return 'application';\n }\n try {\n const parsed = new URL(url, 'http://local.invalid');\n const view = parsed.searchParams.get('view')?.trim();\n if (view === AXP_DEVICE_SESSION_TENANT_SESSIONS_VIEW) {\n return 'tenant';\n }\n } catch {\n // Fall through — treat as application-sessions.\n }\n if (url.includes(`view=${AXP_DEVICE_SESSION_TENANT_SESSIONS_VIEW}`)) {\n return 'tenant';\n }\n return 'application';\n}\n\nexport function withDeviceSessionAdminScopeParam(\n params: Record<string, string> | undefined,\n scope: AXPDeviceSessionAdminScope,\n): Record<string, string> {\n return {\n ...(params ?? {}),\n [AXP_DEVICE_SESSION_ADMIN_SCOPE_PARAM]: scope,\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXP_DEVICE_SESSION_ADMIN_SCOPE_HEADER,\n} from '@acorex-platform/module-security-management-client/contracts';\nimport {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport {\n DEVICE_SESSIONS_ENTITY_NAME,\n resolveDeviceSessionAdminScopeFromUrl,\n} from './device-sessions-admin-scope.util';\n\n//#endregion\n\n//#region ----- Device Sessions admin scope interceptor -----\n\n/**\n * Attaches admin-scope header for DeviceSessions runtime calls so getOne /\n * update / delete honor the same operation as the open list view.\n */\n@Injectable()\nexport class DeviceSessionsAdminScopeInterceptor implements HttpInterceptor {\n private readonly router = inject(Router);\n\n intercept(\n request: HttpRequest<unknown>,\n next: HttpHandler,\n ): Observable<HttpEvent<unknown>> {\n if (!this.targetsDeviceSessions(request)) {\n return next.handle(request);\n }\n\n const scope = resolveDeviceSessionAdminScopeFromUrl(this.router.url);\n return next.handle(\n request.clone({\n setHeaders: {\n [AXP_DEVICE_SESSION_ADMIN_SCOPE_HEADER]: scope,\n },\n }),\n );\n }\n\n private targetsDeviceSessions(request: HttpRequest<unknown>): boolean {\n const body = request.body;\n if (body && typeof body === 'object' && !Array.isArray(body)) {\n const record = body as Record<string, unknown>;\n const input = record['input'];\n const entityFromInput =\n input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)['entity']\n : undefined;\n const entity = record['entity'] ?? entityFromInput;\n if (entity === DEVICE_SESSIONS_ENTITY_NAME) {\n return true;\n }\n }\n\n const entityQuery = request.params?.get?.('entity');\n if (entityQuery === DEVICE_SESSIONS_ENTITY_NAME) {\n return true;\n }\n\n return request.url.includes('/DeviceSessions') || request.url.includes('DeviceSessions');\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPEntityStorageMiddleware,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n DEVICE_SESSIONS_ENTITY_NAME,\n resolveDeviceSessionAdminScopeFromUrl,\n withDeviceSessionAdminScopeParam,\n} from './device-sessions-admin-scope.util';\n\n//#endregion\n\n//#region ----- Device Sessions admin scope (client entity middleware) -----\n\n/**\n * Injects explicit `deviceSessionAdminScope` on DeviceSessions queries from the\n * active list view (`tenant-sessions` vs default application sessions).\n */\nexport const deviceSessionsAdminScopeMiddleware: AXPEntityStorageMiddleware = {\n target: {\n ops: ['query'],\n entity: DEVICE_SESSIONS_ENTITY_NAME,\n order: 8,\n },\n\n execute: async (ctx, next) => {\n const router = inject(Router);\n const scope = resolveDeviceSessionAdminScopeFromUrl(router.url);\n if (ctx.request) {\n ctx.request = {\n ...ctx.request,\n params: withDeviceSessionAdminScopeParam(ctx.request.params, scope),\n };\n }\n await next();\n },\n};\n\n//#endregion\n","import { Injectable } from '@angular/core';\nimport type { AXPContextDefinition, AXPContextDefinitionProvider } from '@acorex-platform/framework-client/core';\nimport { AXM_SECURITY_CONTEXT_DEFINITIONS } from '@acorex-platform/module-security-management-client/contracts';\n\n//#region ---- User context definitions ----\n\n@Injectable()\nexport class AXMSecurityManagementContextDefinitionProvider implements AXPContextDefinitionProvider {\n async items(): Promise<AXPContextDefinition[]> {\n return AXM_SECURITY_CONTEXT_DEFINITIONS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { AXPSecurityManagementFeatureKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Security Management Module Feature Definition Provider.\n * Provides feature definitions for the Security Management module.\n */\nexport class AXMSecurityManagementFeatureDefinitionProvider\n implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n const i18n = RootConfig.config.i18n;\n\n // Manage Roles feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageRoles, {\n title: `@${i18n}:features.manage-roles.title`,\n description: `@${i18n}:features.manage-roles.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Manage Users feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageUsers, {\n title: `@${i18n}:features.manage-users.title`,\n description: `@${i18n}:features.manage-users.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Max Total Users feature (widget configuration)\n context.addFeature(AXPSecurityManagementFeatureKeys.MaxTotalUsers, {\n title: `@${i18n}:features.max-total-users.title`,\n description: `@${i18n}:features.max-total-users.description`,\n defaultValue: 100,\n type: 'number',\n interface: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n placeholder: `@${i18n}:features.max-total-users.title`,\n min: 1,\n max: 10000,\n step: 1,\n },\n },\n });\n\n // Manage Sessions feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageSessions, {\n title: `@${i18n}:features.manage-sessions.title`,\n description: `@${i18n}:features.manage-sessions.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Manage Policies feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManagePolicies, {\n title: `@${i18n}:features.manage-policies.title`,\n description: `@${i18n}:features.manage-policies.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Identity Providers — platform-tenant management only (edition feature on Platform Console)\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageIdentityProviders, {\n title: `@${i18n}:features.manage-identity-providers.title`,\n description: `@${i18n}:features.manage-identity-providers.description`,\n defaultValue: false,\n type: 'boolean',\n });\n\n // Self-service account deletion — off unless an edition enables it\n context.addFeature(AXPSecurityManagementFeatureKeys.DeleteAccount, {\n title: `@${i18n}:features.delete-account.title`,\n description: `@${i18n}:features.delete-account.description`,\n defaultValue: false,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_NAME_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\n\nexport const AXPPermissionsWidget: AXPWidgetConfig = {\n name: \"permissions-editor\",\n title: \"Permissions Editor\",\n description: 'Widget for managing permissions with full editor interface',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: \"fa-light fa-user-shield\",\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n ],\n components: {\n view: {\n component: () => import('./permissions-widget-view.component').then((c) => c.AXPPermissionsWidgetViewComponent),\n },\n edit: {\n component: () => import('./permissions-widget-edit.component').then((c) => c.AXPPermissionsWidgetEditComponent),\n },\n column: {\n component: () => import('./permissions-widget-column.component').then((c) => c.AXPPermissionsWidgetColumnComponent),\n },\n }\n}","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPPermissionsWidget } from './permissions-widget/permissions-widget.config';\n\n//#endregion\n\n//#region ---- Permissions Widgets Provider ----\n\nconst WIDGETS = [AXPPermissionsWidget];\n\n@Injectable()\nexport class AXPPermissionsWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return WIDGETS;\n }\n}\n\n//#endregion\n","import { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { AXPPermissionsWidgetsProvider } from './widget-definition.provider';\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPPermissionsWidgetsProvider, multi: true },\n provideCommandSetups([\n {\n key: 'assign-permissions',\n command: () =>\n import('./commands/assign-permissions.command').then((c) => c.AXMAssignPermissionsCommand),\n },\n ]),\n ],\n})\nexport class AXMPermissionsModule { }\n","import { AXPSessionService } from \"@acorex-platform/framework-client/auth\";\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex-platform/framework-shared/core\";\nimport { inject } from \"@angular/core\";\n\nexport class AXMSecurityManagementEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected sessionService = inject(AXPSessionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('session', {\n currentUser: () => {\n return this.sessionService.user;\n },\n user: () => {\n return this.sessionService.user;\n },\n currentApplication: () => {\n return this.sessionService.application;\n },\n currentTenant: () => {\n return this.sessionService.tenant;\n },\n currentPermissions: () => {\n return this.sessionService.permissions;\n },\n })\n }\n}","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition } from '@acorex-platform/framework-shared/core';\nimport { AXM_USER_ACCESS_STATE_DEFINITION_KEY, AXMUserAccessState } from '@acorex-platform/module-security-management-client/contracts';\n//#endregion\n\n//#region ---- User access state provider ----\n\n/**\n * Sign-in readiness from the authentication subsystem (distinct from account lifecycle / `accountState`).\n * Transitions listed here are the only paths offered in the status UI and validated when executing a status change command.\n */\nexport class AXMUserAccessStateProvider extends AXPStatusProvider {\n readonly key = AXM_USER_ACCESS_STATE_DEFINITION_KEY;\n\n readonly defaultStatus = AXMUserAccessState.Allowed;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.states.allowed',\n description: '@security-management:users.entities.user.access.descriptions.allowed',\n icon: 'fa-light fa-circle-check',\n color: 'success',\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n {\n name: AXMUserAccessState.Blocked,\n title: '@security-management:users.entities.user.access.states.blocked',\n description: '@security-management:users.entities.user.access.descriptions.blocked',\n icon: 'fa-light fa-ban',\n color: 'danger',\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n {\n name: AXMUserAccessState.Expired,\n title: '@security-management:users.entities.user.access.states.expired',\n description: '@security-management:users.entities.user.access.descriptions.expired',\n icon: 'fa-light fa-clock',\n color: 'danger',\n order: 3,\n isInitial: false,\n isFinal: true,\n generateView: false,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXMUserAccessState.Allowed,\n to: AXMUserAccessState.Blocked,\n title: '@security-management:users.entities.user.access.transitions.block-sign-in',\n },\n {\n from: AXMUserAccessState.Allowed,\n to: AXMUserAccessState.Expired,\n title: '@security-management:users.entities.user.access.transitions.require-credential-renewal',\n },\n {\n from: AXMUserAccessState.Blocked,\n to: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.transitions.unblock-sign-in',\n },\n {\n from: AXMUserAccessState.Expired,\n to: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.transitions.restore-after-credential-renewal',\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition } from '@acorex-platform/framework-shared/core';\nimport { AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY, AXMUserEffectiveState } from '@acorex-platform/module-security-management-client/contracts';\n//#endregion\n\n//#region ---- User effective state provider ----\n\n/**\n * Unified operational state for lists, filters, and page chrome (derived from lifecycle + sign-in gate).\n */\nexport class AXMUserEffectiveStateProvider extends AXPStatusProvider {\n readonly key = AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY;\n\n readonly defaultStatus = AXMUserEffectiveState.Active;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXMUserEffectiveState.Pending,\n title: '@security-management:users.entities.user.effective.states.pending',\n description: '@security-management:users.entities.user.effective.descriptions.pending',\n icon: 'fa-light fa-hourglass-half',\n color: 'warning',\n order: 1,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Active,\n title: '@security-management:users.entities.user.effective.states.active',\n description: '@security-management:users.entities.user.effective.descriptions.active',\n icon: 'fa-light fa-circle-check',\n color: 'success',\n order: 2,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.SignInBlocked,\n title: '@security-management:users.entities.user.effective.states.sign-in-blocked',\n description: '@security-management:users.entities.user.effective.descriptions.sign-in-blocked',\n icon: 'fa-light fa-shield-halved',\n color: 'danger',\n order: 3,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.CredentialExpired,\n title: '@security-management:users.entities.user.effective.states.credential-expired',\n description: '@security-management:users.entities.user.effective.descriptions.credential-expired',\n icon: 'fa-light fa-key',\n color: 'danger',\n order: 4,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Suspended,\n title: '@security-management:users.entities.user.effective.states.suspended',\n description: '@security-management:users.entities.user.effective.descriptions.suspended',\n icon: 'fa-light fa-pause-circle',\n color: 'warning',\n order: 5,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Inactive,\n title: '@security-management:users.entities.user.effective.states.inactive',\n description: '@security-management:users.entities.user.effective.descriptions.inactive',\n icon: 'fa-light fa-user-slash',\n color: 'danger',\n order: 6,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Archived,\n title: '@security-management:users.entities.user.effective.states.archived',\n description: '@security-management:users.entities.user.effective.descriptions.archived',\n icon: 'fa-light fa-box-archive',\n color: 'danger',\n order: 7,\n generateView: true,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [];\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPStatusDefinition,\n AXPStatusProvider,\n AXPSystemStatusType,\n} from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- User invitation status (display from TenantUser) -----\n\n/**\n * Display-only statuses for Users list `membershipStatusId`.\n * Values come from TenantUser.statusId (+ acceptedAt → accepted). Does not generate query views.\n */\nexport class AXMUserInvitationStatusProvider extends AXPStatusProvider {\n readonly key = 'security-management.status.user-invitation';\n\n readonly defaultStatus = AXPSystemStatusType.Pending;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXPSystemStatusType.Pending,\n title: '@security-management:users.entities.user.invitation-states.pending',\n icon: 'fa-light fa-envelope',\n color: 'warning',\n order: 1,\n isInitial: true,\n isFinal: false,\n generateView: false,\n },\n {\n name: 'accepted',\n title: '@security-management:users.entities.user.invitation-states.accepted',\n icon: 'fa-light fa-check',\n color: 'success',\n order: 2,\n isInitial: false,\n isFinal: false,\n generateView: false,\n },\n {\n name: AXPSystemStatusType.Rejected,\n title: '@security-management:users.entities.user.invitation-states.rejected',\n icon: 'fa-light fa-user-xmark',\n color: 'danger',\n order: 3,\n isInitial: false,\n isFinal: false,\n generateView: false,\n },\n {\n name: AXPSystemStatusType.Cancelled,\n title: '@security-management:users.entities.user.invitation-states.cancelled',\n icon: 'fa-light fa-ban',\n color: 'neutral',\n order: 4,\n isInitial: false,\n isFinal: false,\n generateView: false,\n },\n {\n name: AXPSystemStatusType.Expired,\n title: '@security-management:users.entities.user.invitation-states.expired',\n icon: 'fa-light fa-clock',\n color: 'neutral',\n order: 5,\n isInitial: false,\n isFinal: true,\n generateView: false,\n },\n ];\n\n readonly transitions = [];\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 {\n AXPAdministrationPermissionKeys,\n AXPSecurityManagementFeatureKeys,\n AXPSecurityManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-security-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const moduleName = RootConfig.module.name;\n\n // Check if Security submenu exists under Administration, create it if not\n const securityMenu = context.find(AXPSecurityManagementMenuKeys.Root);\n if (!securityMenu.exists) {\n // Add Security submenu to Administration group\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n priority: 1,\n text: '@security-management:module.menus.root.title',\n icon: RootConfig.module.icon,\n name: AXPSecurityManagementMenuKeys.Root,\n type: 'menu',\n children: [],\n policy: {\n features: [RootConfig.module.name],\n },\n },\n ]);\n }\n\n // Add menu items under Security submenu\n context.find(AXPSecurityManagementMenuKeys.Root).addItems([\n {\n priority: 9003,\n text: RootConfig.entities.users.titlePlural,\n icon: RootConfig.entities.users.icon,\n name: AXPSecurityManagementMenuKeys.Users,\n path: this.entityService.createPath(moduleName, RootConfig.entities.users.name),\n policy: {\n features: [moduleName],\n permissions: [AXPAdministrationPermissionKeys.MaintainUsersAndRoles],\n },\n },\n {\n priority: 9004,\n text: RootConfig.entities.roles.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.roles.name),\n icon: RootConfig.entities.roles.icon,\n name: AXPSecurityManagementMenuKeys.Roles,\n policy: {\n features: [moduleName],\n permissions: [AXPAdministrationPermissionKeys.MaintainUsersAndRoles],\n },\n },\n {\n priority: 9005,\n text: RootConfig.entities.deviceSessions.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.deviceSessions.name),\n icon: RootConfig.entities.deviceSessions.icon,\n name: AXPSecurityManagementMenuKeys.DeviceSessions,\n policy: {\n features: [moduleName],\n permissions: [AXPAdministrationPermissionKeys.ManageSessions],\n },\n },\n {\n priority: 9007,\n text: RootConfig.entities.identityProvider.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.identityProvider.name),\n icon: RootConfig.entities.identityProvider.icon,\n name: AXPSecurityManagementMenuKeys.IdentityProviders,\n policy: {\n // Platform Console edition only (not on Safetyminder / tenant apps)\n features: [AXPSecurityManagementFeatureKeys.ManageIdentityProviders],\n permissions: [AXPAdministrationPermissionKeys.MaintainPolicies],\n },\n },\n // {\n // priority: 9006,\n // text: RootConfig.entities.policy.titlePlural,\n // path: this.entityService.createPath(moduleName, RootConfig.entities.policy.name),\n // icon: RootConfig.entities.policy.icon,\n // name: AXPSecurityManagementMenuKeys.Policy,\n // policy: {\n // permissions: [AXPAdministrationPermissionKeys.MaintainPolicies],\n // },\n // },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPAdministrationPermissionKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers Administration root + Security & Access section capabilities.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPAdministrationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:administration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, { order: 120 });\n\n context\n .addGroup(\n groups.Administration.SecurityAccess,\n `${G}.administration-security-access.title`,\n `${G}.administration-security-access.description`,\n { parent: groups.Administration.Root, order: 10 },\n )\n .addPermission(keys.Access, `${P}.access.title`, `${P}.access.description`)\n .endPermission()\n .addPermission(\n keys.MaintainUsersAndRoles,\n `${P}.maintain-users-and-roles.title`,\n `${P}.maintain-users-and-roles.description`,\n )\n .endPermission()\n .addPermission(keys.ManageSessions, `${P}.manage-sessions.title`, `${P}.manage-sessions.description`)\n .endPermission()\n .addPermission(keys.MaintainPolicies, `${P}.maintain-policies.title`, `${P}.maintain-policies.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n// TODO: Refactor to generic provider (do it later)\n//\n// Move this logic to a generic AXPEntityCreateSearchCommandProvider in libs/platform/layout/entity.\n// The generic provider should:\n// - Inject AXPEntityDefinitionRegistryService and AXPSessionService\n// - Override search(text) to build commands dynamically from registry\n// - Filter entities: only aggregate roots (commands?.create exists AND !parentKey)\n// - Filter by permission: sessionService.authorize() for both Create and Management\n// Permission convention: `${module}:Permission:${entity.name}.Create` or `.Management`\n// - Use createEntityCommandOptions() with Entity:Create command (same pattern as below)\n// - Register in entity module as AXP_SEARCH_PROVIDER\n// - Remove this and other module-specific search command providers that only add entity-create commands\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-security-user',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.users.name}`,\n entityInfo: { name: RootConfig.entities.users.name, module: RootConfig.module.name, title: RootConfig.entities.users.title },\n titleKey: '@security-management:users.permissions.create.title',\n descriptionKey: '@security-management:users.permissions.create.description',\n icon: RootConfig.entities.users.icon,\n }),\n createEntitySearchCommand({\n id: 'create-security-role',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n entityInfo: { name: RootConfig.entities.roles.name, module: RootConfig.module.name, title: RootConfig.entities.roles.title },\n titleKey: '@security-management:roles.permissions.create.title',\n descriptionKey: '@security-management:roles.permissions.create.description',\n icon: RootConfig.entities.roles.icon,\n }),\n ];\n}\n","//#region ----- Imports -----\n\nimport type { AXPEntityModifierProvider } from '@acorex-platform/framework-client/layout/entity';\nimport {\n isUserProvisioningListAction,\n RootConfig,\n userProvisioningListActions,\n} from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ----- User provisioning modifier -----\n\n/**\n * Demo loads User from `Domain:GetEntityLayout`, so the packaged factory is not the layout\n * the list renders. Rewrite the server actions in memory after that load.\n */\nexport const AXMUserProvisioningEntityModifier: AXPEntityModifierProvider = {\n entityName: RootConfig.entities.users.name,\n order: 200,\n modifier: (ctx) => {\n if (ctx.module.get() !== RootConfig.module.name) {\n return;\n }\n\n ctx.interfaces.master.list.update((current) => {\n const kept = (current?.actions ?? []).filter((action) => !isUserProvisioningListAction(action));\n return {\n views: current?.views ?? [],\n ...current,\n actions: [...userProvisioningListActions(), ...kept],\n };\n });\n },\n};\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_SEARCH_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n AXP_STATUS_PROVIDERS,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXP_CONTEXT_DEFINITION_PROVIDER,\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXP_FEATURE_DEFINITION_PROVIDER,\n provideLazyProvider,\n} from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { DeviceSessionsAdminScopeInterceptor } from './middlewares/device-sessions-admin-scope.interceptor';\nimport { deviceSessionsAdminScopeMiddleware } from './middlewares/device-sessions-admin-scope.middleware';\nimport { AXMSecurityManagementContextDefinitionProvider } from './context-definition.provider';\nimport { AXMSecurityManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMPermissionsModule } from './features/permissions/permissions.module';\nimport { AXMSecurityManagementEvaluatorScopeProvider } from './features/security-evaluator-scope.provider';\nimport { AXMUserAccessStateProvider } from './features/shared/user-access-state.provider';\nimport { AXMUserEffectiveStateProvider } from './features/shared/user-effective-state.provider';\nimport { AXMUserInvitationStatusProvider } from './features/shared/user-invitation-status.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 { AXMUserProvisioningEntityModifier } from './user-provisioning.entity-modifier';\n\n@NgModule({\n imports: [\n AXMPermissionsModule,\n ],\n exports: [],\n declarations: [],\n providers: [\n // Module-specific providers (not part of manifest system)\n {\n provide: AXP_ENTITY_STORAGE_MIDDLEWARE,\n useValue: deviceSessionsAdminScopeMiddleware,\n multi: true,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n useValue: AXMUserProvisioningEntityModifier,\n multi: true,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: DeviceSessionsAdminScopeInterceptor,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMSecurityManagementEvaluatorScopeProvider,\n multi: true,\n },\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/permissions/pages/role-permissions-page').then(\n (m) => m.AXMRolePermissionsPageComponentProvider,\n ),\n ),\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/user-roles/pages/user-roles-page').then(\n (m) => m.AXMUserRolesPageComponentProvider,\n ),\n ),\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXMSecurityManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserAccessStateProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserEffectiveStateProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserInvitationStatusProvider,\n multi: true,\n },\n {\n provide: AXP_CONTEXT_DEFINITION_PROVIDER,\n useClass: AXMSecurityManagementContextDefinitionProvider,\n multi: true,\n },\n provideLazyProvider(AXP_SETTING_DEFINITION_PROVIDER, () =>\n import('./settings.provider').then((m) => m.AXMSecurityManagementSettingProvider),\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 key: 'SecurityManagement:User:ResetTwoFactor',\n command: () => import('./commands/reset-two-factor.command').then((c) => c.AXPResetTwoFactorCommand),\n },\n {\n key: 'SecurityManagement:User:Invite',\n command: () => import('./commands/invite-user.command').then((c) => c.AXPInviteUserCommand),\n },\n {\n key: 'SecurityManagement:User:CreateInTenant',\n command: () =>\n import('./commands/create-user-in-tenant.command').then((c) => c.AXPCreateUserInTenantCommand),\n },\n {\n key: 'SecurityManagement:User:ResendInvitation',\n command: () =>\n import('./commands/resend-invitation.command').then((c) => c.AXPResendInvitationCommand),\n },\n {\n key: 'SecurityManagement:User:CancelInvitation',\n command: () =>\n import('./commands/cancel-invitation.command').then((c) => c.AXPCancelInvitationCommand),\n },\n {\n key: 'SecurityManagement:User:ApproveJoinRequest',\n command: () =>\n import('./commands/approve-join-request.command').then((c) => c.AXPApproveJoinRequestCommand),\n },\n {\n key: 'SecurityManagement:User:RejectJoinRequest',\n command: () =>\n import('./commands/reject-join-request.command').then((c) => c.AXPRejectJoinRequestCommand),\n },\n ]),\n ],\n})\nexport class AXMSecurityManagementModule {}\n","// #region ---------------- Imports ----------------\nimport {\n Component,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n input,\n output,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport {\n AXPPermissionDefinition,\n AXPPermissionDefinitionService,\n AXPPermissionGroupDefinition,\n} from '@acorex-platform/framework-client/auth';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { FormsModule } from '@angular/forms';\nimport { AXCommonModule, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { setupPopupFooterKeyboardShortcuts } from '@acorex-platform/framework-client/core';\nimport { isEmpty, trim } from 'lodash-es';\n// #endregion\n\n// #region ---------------- Types ----------------\n\ninterface MappedPermission extends Omit<AXPPermissionDefinition, 'children'> {\n isSelected: boolean;\n children: MappedPermission[] | null;\n}\n\n/** Right-panel section (optional nested group) or a flat unsectioned block. */\ninterface PermissionPanelSection {\n name: string;\n title: string | null;\n items: MappedPermission[];\n}\n\ninterface PermissionSearchGroupResult {\n group: AXPPermissionGroupDefinition & { badge: string };\n sections: PermissionPanelSection[];\n}\n\n// #endregion\n\n@Component({\n selector: 'axm-permissions-editor',\n templateUrl: './permissions-editor.component.html',\n styleUrl: './permissions-editor.component.css',\n imports: [\n // Angular\n CommonModule,\n FormsModule,\n AXCommonModule,\n // ACoreX\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXTabsModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBadgeModule,\n AXCheckBoxModule,\n AXTooltipModule,\n AXSkeletonModule,\n AXSearchBoxModule,\n AXPStateMessageComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[class]': 'hostClass()',\n '[attr.aria-busy]': 'isEditorLoading() ? \"true\" : null',\n },\n})\nexport class AXPPermissionsEditorComponent extends AXBasePageComponent {\n // #region ---------------- Class Properties ----------------\n /** Service for fetching permission groups and definitions */\n private permissionService = inject(AXPPermissionDefinitionService);\n\n /** Translation service for resolving permission labels during search */\n private translationService = inject(AXTranslationService);\n\n /** Currently selected permission group */\n protected selectedGroup = signal<AXPPermissionGroupDefinition | null>(null);\n\n /** Current search query */\n protected searchQuery = signal('');\n\n /** All available permission groups */\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n /** Initial permissions to be selected - exposed as signal input */\n initialPermissions = input<string[]>([]);\n\n /** Whether the editor is in read-only mode */\n readOnly = input<boolean>(false);\n\n /** Whether popup footer actions (Cancel / Select) are shown */\n showActions = input<boolean>(false);\n\n /** When true, fills the host (detail page) without the dialog max-height cap. */\n fillHeight = input<boolean>(false);\n\n protected readonly hostClass = computed(() =>\n this.fillHeight()\n ? 'axm-permissions-editor axm-permissions-editor--fill-height flex h-full min-h-0 flex-col overflow-hidden'\n : 'axm-permissions-editor axm-permissions-editor--dialog flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden p-4 gap-3',\n );\n\n /** List of selected permission names */\n protected selectedPermissions = signal<string[]>([]);\n\n /** Event emitted when permissions selection changes */\n permissionsChanged = output<string[]>();\n\n /** Event emitted when permissions are applied/selected */\n permissionsSelected = output<string[]>();\n\n /** Whether permission groups are being loaded */\n protected isEditorLoading = signal(true);\n // #endregion\n\n // #region ---------------- Constructor ----------------\n\n constructor() {\n super();\n setupPopupFooterKeyboardShortcuts(\n () => {\n if (!this.isShowActions()) {\n return [];\n }\n\n return [\n {\n title: '@general:actions.cancel.title',\n command: 'cancel',\n handler: () => this.handleCancelClick(),\n },\n {\n title: '@general:actions.select.title',\n command: 'select',\n handler: () => this.handleSelectClick(),\n },\n ];\n },\n { id: 'permissions-editor-popup', when: () => this.isShowActions() },\n );\n }\n\n // #endregion\n\n // #region ---------------- Computed Properties ----------------\n\n /**\n * Reads a signal input or a plain value assigned by AXPopupService data binding.\n */\n private readBoundValue<T>(value: unknown, fallback: T): T {\n if (typeof value === 'function') {\n return (value as () => T)();\n }\n\n return (value ?? fallback) as T;\n }\n\n /** Whether popup footer actions are visible (supports popup data and input binding). */\n protected isShowActions(): boolean {\n return this.readBoundValue(this.showActions, false);\n }\n\n /** Whether the editor is read-only (supports popup data and input binding). */\n protected isReadOnlyMode(): boolean {\n return this.readBoundValue(this.readOnly, false);\n }\n\n /** Initial permission selection (supports popup data and input binding). */\n protected getInitialPermissions(): string[] {\n return this.readBoundValue(this.initialPermissions, []);\n }\n\n /**\n * Recursively maps permissions to include selection state and children.\n * Sorted alphabetically by translated title.\n */\n private mapPermissions(items: AXPPermissionDefinition[]): MappedPermission[] {\n const mapped = (items || []).map((item) => {\n const children = item.children;\n return {\n ...item,\n isSelected: this.isSelected(item.name),\n children: children?.length ? this.mapPermissions(children) : null,\n };\n });\n return mapped.sort((a, b) =>\n this.compareByTitle(a.title, b.title, a.name, b.name),\n );\n }\n\n /**\n * Locale-aware label comparison using the resolved translation when available.\n */\n private compareByTitle(\n titleA: string,\n titleB: string,\n tieBreakerA = titleA,\n tieBreakerB = titleB,\n ): number {\n const labelA = (\n this.translationService.translateSync(titleA) || titleA\n ).toLocaleLowerCase();\n const labelB = (\n this.translationService.translateSync(titleB) || titleB\n ).toLocaleLowerCase();\n const byLabel = labelA.localeCompare(labelB);\n if (byLabel !== 0) {\n return byLabel;\n }\n return tieBreakerA.localeCompare(tieBreakerB);\n }\n\n /**\n * Computed: Left-nav roots only (groups without a parent), sorted by title.\n */\n protected groupsWithBadge = computed(() => {\n const roots = this.groups().filter((group) => !group.parent);\n const result = roots.map((group) => ({\n ...group,\n badge: this.getBadge(group) || '',\n }));\n return result.sort((a, b) =>\n this.compareByTitle(a.title, b.title, a.name, b.name),\n );\n });\n\n /**\n * Computed: Right-panel sections for the selected root (or one flat block).\n */\n protected selectedSections = computed((): PermissionPanelSection[] => {\n const selected = this.selectedGroup();\n if (!selected) {\n return [];\n }\n return this.buildPanelSections(selected, null);\n });\n\n /** Sidebar group placeholders for the loading skeleton */\n protected readonly groupSkeletonPlaceholders = computed(() => [\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n ]);\n\n /** Permission group placeholders (parent + child rows) for the loading skeleton */\n protected readonly permissionGroupSkeletonPlaceholders = computed(() => [\n { childCount: 4 },\n { childCount: 4 },\n { childCount: 2 },\n { childCount: 4 },\n ]);\n\n /** Child row placeholders for a permission group skeleton */\n protected readonly childSkeletonPlaceholders = (count: number) =>\n Array.from({ length: count }, (_, index) => index);\n\n /** Whether the user is actively searching permissions */\n protected isSearchActive = computed(() => !isEmpty(trim(this.searchQuery())));\n\n /** Grouped search results across all root permission groups */\n protected searchResultsGrouped = computed(\n (): PermissionSearchGroupResult[] => {\n const normalizedQuery = trim(this.searchQuery()).toLowerCase();\n if (!normalizedQuery) {\n return [];\n }\n\n return this.groupsWithBadge()\n .map((group) => ({\n group,\n sections: this.buildPanelSections(group, normalizedQuery),\n }))\n .filter((result) => !isEmpty(result.sections));\n },\n );\n\n /** Whether the active search returned any permission groups */\n protected hasSearchResults = computed(\n () => !isEmpty(this.searchResultsGrouped()),\n );\n // #endregion\n\n // #region ---------------- Utility Methods ----------------\n /**\n * Drops empty roots/sections after session feature filtering in\n * {@link AXPPermissionDefinitionService}. Keeps a root only when it or a child\n * section still has at least one permission.\n */\n private filterGroupsByEnabledModules(\n groups: AXPPermissionGroupDefinition[],\n ): AXPPermissionGroupDefinition[] {\n const withPermissions = new Set(\n groups.filter((group) => (group.permissions?.length ?? 0) > 0).map((group) => group.name),\n );\n const parentsOfKept = new Set(\n groups\n .filter((group) => withPermissions.has(group.name) && group.parent)\n .map((group) => group.parent as string),\n );\n return groups.filter(\n (group) => withPermissions.has(group.name) || parentsOfKept.has(group.name),\n );\n }\n\n /** Permission keys still visible after edition/feature filtering. */\n private collectAvailablePermissionNames(groups: AXPPermissionGroupDefinition[]): Set<string> {\n const names = new Set<string>();\n const walk = (permissions: AXPPermissionDefinition[]) => {\n for (const permission of permissions) {\n names.add(permission.name);\n if (permission.children?.length) {\n walk(permission.children);\n }\n }\n };\n for (const group of groups) {\n walk(group.permissions ?? []);\n }\n return names;\n }\n\n /**\n * Child section groups under a root, sorted alphabetically by translated title.\n */\n private getChildSections(\n root: AXPPermissionGroupDefinition,\n ): AXPPermissionGroupDefinition[] {\n return this.groups()\n .filter((group) => group.parent === root.name)\n .sort((a, b) => this.compareByTitle(a.title, b.title, a.name, b.name));\n }\n\n /**\n * Builds right-panel sections for a root. When `normalizedQuery` is set, keeps\n * only matching permissions/sections (and sections whose title matches).\n */\n private buildPanelSections(\n root: AXPPermissionGroupDefinition,\n normalizedQuery: string | null,\n ): PermissionPanelSection[] {\n const children = this.getChildSections(root);\n const sections: PermissionPanelSection[] = [];\n const rootMatches =\n !!normalizedQuery && this.matchesGroup(root, normalizedQuery);\n\n if (children.length === 0) {\n const permissions = normalizedQuery\n ? this.getFilteredGroupPermissions(root, normalizedQuery)\n : (root.permissions ?? []);\n if (!isEmpty(permissions)) {\n sections.push({\n name: root.name,\n title: null,\n items: this.mapPermissions(permissions),\n });\n }\n return sections;\n }\n\n const rootPermissions =\n !normalizedQuery || rootMatches\n ? (root.permissions ?? [])\n : this.getFilteredGroupPermissions(root, normalizedQuery);\n if (!isEmpty(rootPermissions)) {\n sections.push({\n name: `${root.name}__root`,\n title: null,\n items: this.mapPermissions(rootPermissions),\n });\n }\n\n for (const child of children) {\n const sectionMatches =\n !!normalizedQuery && this.matchesGroup(child, normalizedQuery);\n const permissions =\n !normalizedQuery || rootMatches || sectionMatches\n ? (child.permissions ?? [])\n : this.getFilteredGroupPermissions(child, normalizedQuery);\n\n if (isEmpty(permissions)) {\n continue;\n }\n\n sections.push({\n name: child.name,\n title: child.title,\n items: this.mapPermissions(permissions),\n });\n }\n\n return sections;\n }\n\n /**\n * Recursively collects all permission names (parents and children) from an array.\n */\n private collectAllPermissionNames(\n permissions: AXPPermissionDefinition[],\n ): string[] {\n let names: string[] = [];\n for (const item of permissions) {\n names.push(item.name);\n if (item.children?.length) {\n names = names.concat(this.collectAllPermissionNames(item.children));\n }\n }\n return names;\n }\n\n /**\n * Returns the badge count for a root (own permissions + child section permissions).\n */\n private getBadge(group: AXPPermissionGroupDefinition): string {\n const ownNames = this.collectAllPermissionNames(group.permissions || []);\n const childNames = this.getChildSections(group).flatMap((child) =>\n this.collectAllPermissionNames(child.permissions || []),\n );\n const allNames = [...ownNames, ...childNames];\n const selectedPermissions = this.selectedPermissions();\n const count = allNames.filter((name) =>\n selectedPermissions.includes(name),\n ).length;\n return count.toString();\n }\n\n /**\n * Checks if a permission is selected.\n */\n private isSelected(name: string): boolean {\n return this.selectedPermissions().includes(name);\n }\n\n /**\n * Checks if a permission is selected.\n */\n protected badgeToNumber(value: unknown): number {\n return Number(value);\n }\n\n /** Looks up a left-nav root group by tab key (group name). */\n protected getGroupByKey(\n key: string | undefined,\n ): (AXPPermissionGroupDefinition & { badge: string }) | undefined {\n if (!key) {\n return undefined;\n }\n return this.groupsWithBadge().find((group) => group.name === key);\n }\n\n /**\n * Returns true when searchable text contains the query.\n */\n private matchesSearchText(\n text: string | undefined,\n normalizedQuery: string,\n ): boolean {\n if (!text) {\n return false;\n }\n\n const translated = this.translationService.translateSync(text) || text;\n return (\n translated.toLowerCase().includes(normalizedQuery) ||\n text.toLowerCase().includes(normalizedQuery)\n );\n }\n\n /**\n * Returns true when a permission title or description matches the query.\n */\n private matchesPermission(\n permission: AXPPermissionDefinition,\n normalizedQuery: string,\n ): boolean {\n return (\n this.matchesSearchText(permission.title, normalizedQuery) ||\n this.matchesSearchText(permission.description, normalizedQuery)\n );\n }\n\n /**\n * Returns true when a permission group title or description matches the query.\n */\n private matchesGroup(\n group: AXPPermissionGroupDefinition,\n normalizedQuery: string,\n ): boolean {\n return (\n this.matchesSearchText(group.title, normalizedQuery) ||\n this.matchesSearchText(group.description, normalizedQuery)\n );\n }\n\n /**\n * Filters permissions while keeping ancestor nodes for matching descendants.\n */\n private filterPermissions(\n items: AXPPermissionDefinition[],\n normalizedQuery: string,\n ): AXPPermissionDefinition[] {\n const result: AXPPermissionDefinition[] = [];\n\n for (const item of items) {\n const filteredChildren = this.filterPermissions(\n item.children ?? [],\n normalizedQuery,\n );\n const selfMatches = this.matchesPermission(item, normalizedQuery);\n\n if (selfMatches || !isEmpty(filteredChildren)) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n }\n }\n\n return result;\n }\n\n /**\n * Returns filtered permissions for a group, or all permissions when the group itself matches.\n */\n private getFilteredGroupPermissions(\n group: AXPPermissionGroupDefinition,\n normalizedQuery: string,\n ): AXPPermissionDefinition[] {\n const permissions = group.permissions ?? [];\n\n if (this.matchesGroup(group, normalizedQuery)) {\n return permissions;\n }\n\n return this.filterPermissions(permissions, normalizedQuery);\n }\n\n /**\n * Recursively collects all descendant permission names for a single item (including itself).\n */\n private collectPermissionNames(item: MappedPermission): string[] {\n let names = [item.name];\n if (item.children) {\n for (const child of item.children) {\n names = names.concat(this.collectPermissionNames(child));\n }\n }\n return names;\n }\n\n /**\n * Gets the current selected permissions.\n */\n public getSelectedPermissions(): string[] {\n return this.selectedPermissions();\n }\n\n /**\n * Sets the selected permissions.\n */\n public setSelectedPermissions(permissions: string[]): void {\n this.selectedPermissions.set(permissions || []);\n this.permissionsChanged.emit(this.selectedPermissions());\n }\n\n /**\n * Applies/selects the current permissions.\n */\n public selectPermissions(): void {\n this.permissionsSelected.emit(this.selectedPermissions());\n }\n // #endregion\n\n // #region ---------------- Lifecycle Methods ----------------\n /**\n * Initializes the component and loads permission groups.\n * Filters groups to only show permissions from modules enabled for the current tenant.\n */\n override async ngOnInit() {\n super.ngOnInit();\n try {\n const allGroups = await this.permissionService.getGroups();\n const filteredGroups = this.filterGroupsByEnabledModules(allGroups);\n this.groups.set(filteredGroups);\n\n // Select first left-nav root in the same title-sorted order as the sidebar\n const firstRoot = [...filteredGroups]\n .filter((group) => !group.parent)\n .sort((a, b) => this.compareByTitle(a.title, b.title, a.name, b.name))[0];\n if (firstRoot) {\n this.selectedGroup.set(firstRoot);\n }\n // Drop grants for permissions not available in this edition (e.g. platform caps in Safetyminder).\n const available = this.collectAvailablePermissionNames(filteredGroups);\n const initial = this.getInitialPermissions().filter((name) => available.has(name));\n this.selectedPermissions.set(initial);\n this.permissionsChanged.emit(initial);\n } finally {\n this.isEditorLoading.set(false);\n }\n }\n // #endregion\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles group tab/menu item click.\n */\n protected handleMenuItemClick(item: AXPPermissionGroupDefinition) {\n this.selectedGroup.set(item);\n }\n\n /**\n * Updates the search query when the search box value changes.\n */\n protected handleSearchChanged(\n event: AXValueChangedEvent<string | null>,\n ): void {\n this.searchQuery.set(event.value ?? '');\n }\n\n /**\n * Handles permission checkbox toggle (checks/unchecks all children recursively).\n */\n protected onPermissionToggle(\n item: MappedPermission,\n e: AXValueChangedEvent,\n ): void {\n // Don't allow changes in read-only mode\n if (this.isReadOnlyMode()) {\n return;\n }\n\n const names = this.collectPermissionNames(item);\n if (e.value) {\n // Add all names (parent + children), avoiding duplicates\n const set = new Set([...this.selectedPermissions(), ...names]);\n this.selectedPermissions.set(Array.from(set));\n } else {\n // Remove all names (parent + children)\n this.selectedPermissions.set(\n this.selectedPermissions().filter((name) => !names.includes(name)),\n );\n }\n this.permissionsChanged.emit(this.selectedPermissions());\n }\n\n /**\n * Closes the popup without applying permission changes.\n */\n protected handleCancelClick(): void {\n this.close();\n }\n\n /**\n * Applies the current selection and closes the popup.\n */\n protected handleSelectClick(): void {\n const permissions = this.getSelectedPermissions();\n this.permissionsSelected.emit(permissions);\n this.close(permissions);\n }\n // #endregion\n}\n","<div class=\"__frame\">\n @if (isEditorLoading()) {\n <!-- ----- Skeleton while permission groups load ----- -->\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n <div class=\"__groups p-4 w-2/5\" aria-hidden=\"true\">\n <div class=\"flex flex-col gap-3 h-full\">\n @for (widthClass of groupSkeletonPlaceholders(); track $index) {\n <div class=\"flex items-center py-2\">\n <div class=\"h-5 rounded-md overflow-hidden\" [class]=\"widthClass\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div\n class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\"\n aria-hidden=\"true\"\n >\n <div class=\"__header p-4 border-b border-lightest\">\n <div class=\"h-6 w-48 rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__content flex flex-col gap-1 p-4\">\n @for (group of permissionGroupSkeletonPlaceholders(); track $index) {\n <div class=\"__skeleton-permission-group\">\n <div class=\"flex items-center gap-2 py-1\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-40 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__children p-2 mt-1 ms-1\">\n @for (\n childIndex of childSkeletonPlaceholders(group.childCount);\n track childIndex\n ) {\n <div class=\"flex items-center gap-2 py-1 ps-2\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-32 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n <!-- ----- Loaded editor: search + group/permission columns ----- -->\n @else {\n <div class=\"__search px-4 pt-4 pb-3 border-b border-border-lightest\">\n <ax-search-box\n [axAutoFocus]\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"handleSearchChanged($event)\"\n [placeholder]=\"\n '@security-management:permissions-feature.components.permissions-editor.search.placeholder'\n | translate\n | async\n \"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n @if (isSearchActive()) {\n <!-- ----- Search results fill both columns ----- -->\n <div\n class=\"__permissions __permissions--search flex min-h-0 flex-1 flex-col overflow-hidden\"\n >\n @if (hasSearchResults()) {\n <div class=\"__search-results flex min-h-0 flex-1 flex-col overflow-y-auto\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group shrink-0\">\n <div\n class=\"__header shrink-0 p-4 border-b border-border-lightest\"\n >\n <span class=\"h6\">{{\n result.group.title | translate | async\n }}</span>\n </div>\n\n <div class=\"__content flex flex-col gap-4 p-4\">\n @for (section of result.sections; track section.name) {\n <section class=\"__section\">\n @if (section.title) {\n <div class=\"__section-header\">\n <span class=\"__section-title\">{{\n section.title | translate | async\n }}</span>\n </div>\n }\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: section.items }\n \"\n ></ng-container>\n </ul>\n </section>\n }\n </div>\n </section>\n }\n </div>\n }\n <!-- ----- Empty search results ----- -->\n @else {\n <div class=\"__empty flex flex-1 items-center justify-center p-8\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.title'\n \"\n [description]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.description'\n \"\n >\n </axp-state-message>\n </div>\n }\n </div>\n }\n <!-- ----- Browse mode: groups nav + permissions panel ----- -->\n @else {\n <div class=\"__groups w-2/5\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"__group-tabs\">\n @for (group of groupsWithBadge(); track group.name) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [key]=\"group.name\"\n [text]=\"(group.title | translate | async)!\"\n [headerTemplate]=\"groupTabHeader\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <div class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s border-border-lightest\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest font-semibold\">\n <span>{{ $safeNavigationMigration(selectedGroup()?.title)! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex flex-col gap-4 p-4\">\n @for (section of selectedSections(); track section.name) {\n <section class=\"__section\">\n @if (section.title) {\n <div class=\"__section-header\">\n <span class=\"__section-title\">{{\n section.title | translate | async\n }}</span>\n </div>\n }\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: section.items }\n \"\n ></ng-container>\n </ul>\n </section>\n }\n </div>\n </div>\n }\n </div>\n }\n</div>\n\n@if (isShowActions()) {\n <!-- ----- Dialog footer actions ----- -->\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancelClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.select.title' | translate | async\"\n (onClick)=\"handleSelectClick()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-check\"></i>\n </ax-prefix>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n}\n\n<!-- ----- Left-nav group tab: title + description + badge ----- -->\n<ng-template #groupTabHeader let-ctx>\n @if (getGroupByKey(ctx.key); as group) {\n <div class=\"__group-tab\">\n <div class=\"__group-tab-main\">\n <div class=\"__group-tab-title\">{{ ctx.text }}</div>\n @if (group.description) {\n <div class=\"__group-tab-description\">\n {{ group.description | translate | async }}\n </div>\n }\n </div>\n @if (badgeToNumber(group.badge) > 0) {\n <ax-badge\n class=\"__group-tab-badge\"\n [color]=\"'primary'\"\n [look]=\"'twotone'\"\n [text]=\"group.badge\"\n ></ax-badge>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n <span class=\"__permission-label\">\n <span class=\"__permission-title\">{{\n item.title | translate | async\n }}</span>\n @if (item.description) {\n <span class=\"__permission-description\">{{\n item.description | translate | async\n }}</span>\n }\n </span>\n </ax-label>\n </ax-check-box>\n\n @if (item.children && item.children.length > 0) {\n <ul class=\"__children p-2 mt-1 ms-1\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: item.children }\n \"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { coerceUnknownToTrimmedString } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityBroadcastService } from '@acorex-platform/framework-client/core';\nimport {\n AXPEntityDefinitionRegistryService,\n AXPEntityService,\n dispatchEntityModifiedSideEffects,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport type { RolePermissionGrantRow, SaveRolePermissionGrantOptions } from './role-permission-grant.types';\n\n//#endregion\n\n//#region ----- Service -----\n\n/**\n * Loads and persists scoped RolePermission grants for a role.\n * Shared by the Assign Permissions dialog and the Role permissions detail page.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMRolePermissionGrantService {\n //#region ----- Services & Dependencies -----\n\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly entityEvents = inject(AXPEntityBroadcastService);\n\n //#endregion\n\n //#region ----- Scope -----\n\n resolveSessionScope(): { tenantId: string; applicationId: string | undefined } | null {\n const tenantId = coerceUnknownToTrimmedString(this.sessionService.tenant?.id);\n if (!tenantId) {\n return null;\n }\n return {\n tenantId,\n applicationId: coerceUnknownToTrimmedString(this.sessionService.application?.id) || undefined,\n };\n }\n\n //#endregion\n\n //#region ----- Query -----\n\n private rolePermissionData() {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.rolePermission.name)\n .data<string, RolePermissionGrantRow, RolePermissionGrantRow>();\n }\n\n async findGrant(\n roleId: string,\n tenantId: string,\n applicationId: string | undefined,\n ): Promise<RolePermissionGrantRow | null> {\n const result = await this.rolePermissionData().query({\n skip: 0,\n take: 50,\n filter: {\n logic: 'and',\n filters: [\n { field: 'roleId', operator: { type: 'equal' }, value: roleId },\n { field: 'scopeInfo.tenantId', operator: { type: 'equal' }, value: tenantId },\n ],\n },\n } as never);\n\n const items = (result?.items ?? []) as RolePermissionGrantRow[];\n if (items.length === 0) {\n return null;\n }\n\n if (applicationId) {\n const appMatch = items.find(\n (item) => coerceUnknownToTrimmedString(item.scopeInfo?.applicationId) === applicationId,\n );\n if (appMatch) {\n return appMatch;\n }\n }\n\n const tenantWide = items.find((item) => !coerceUnknownToTrimmedString(item.scopeInfo?.applicationId));\n return tenantWide ?? items[0] ?? null;\n }\n\n //#endregion\n\n //#region ----- Persist -----\n\n async saveGrant(options: SaveRolePermissionGrantOptions): Promise<Record<string, unknown>> {\n const existingState = options.existing?.stateInfo;\n if (existingState?.isSystem === true || existingState?.isImmutable === true) {\n throw new Error('System role permission grants are readonly.');\n }\n\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.rolePermission.name}`;\n const [moduleName, entityName] = entityKey.split('.');\n const entityRef = await this.entityRegistry.resolve(moduleName, entityName);\n\n const scopeInfo = {\n tenantId: options.tenantId,\n ...(options.existing?.scopeInfo?.applicationId\n ? { applicationId: options.existing.scopeInfo.applicationId }\n : options.applicationId\n ? { applicationId: options.applicationId }\n : {}),\n };\n\n if (options.existing?.id) {\n const updatePayload = {\n ...options.existing,\n roleId: options.roleId,\n permissions: options.permissions,\n scopeInfo,\n };\n return (\n entityRef.commands?.update?.execute as (data: Record<string, unknown>) => Promise<Record<string, unknown>>\n )(updatePayload);\n }\n\n const createPayload = {\n roleId: options.roleId,\n permissions: options.permissions,\n scopeInfo,\n };\n return (\n entityRef.commands?.create?.execute as (data: Record<string, unknown>) => Promise<Record<string, unknown>>\n )(createPayload);\n }\n\n notifyGrantModified(saved: Record<string, unknown>): void {\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.rolePermission.name}`;\n dispatchEntityModifiedSideEffects(this.entityEvents, entityKey, saved);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport { isArray, isEmpty, isString } from 'lodash-es';\nimport { AXMRolePermissionGrantService } from '../role-permission-grant.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMAssignPermissionsCommandInput {\n data?: Record<string, unknown>;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable()\nexport class AXMAssignPermissionsCommand implements AXPCommand<AXMAssignPermissionsCommandInput, string[] | null> {\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogOpener = inject(AXPDialogOpener);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly grantService = inject(AXMRolePermissionGrantService);\n\n //#endregion\n\n //#region ----- Execute -----\n\n async execute(input: AXMAssignPermissionsCommandInput): AXPCommandExecuteResultPromise<string[] | null> {\n try {\n const role = input.data;\n if (!role || !isString(role['id']) || isEmpty(role['id'])) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const roleId = role['id'] as string;\n const scope = this.grantService.resolveSessionScope();\n if (!scope) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const existingGrant = await this.grantService.findGrant(roleId, scope.tenantId, scope.applicationId);\n const grantReadonly =\n existingGrant?.stateInfo?.isSystem === true || existingGrant?.stateInfo?.isImmutable === true;\n\n const roleTitle = this.resolveRoleTitle(role['title']);\n const initialPermissions = existingGrant?.permissions ?? [];\n let editorTitle = '';\n\n const popupResult = await this.dialogOpener.openPopup({\n load: () =>\n import('../permissions-editor/permissions-editor.component').then((m) => m.AXPPermissionsEditorComponent),\n data: { roleId, readOnly: grantReadonly },\n prepare: async () => {\n editorTitle = await this.translationService.translateAsync(\n '@security-management:permissions-feature.terms.permissions-editor',\n );\n },\n show: (component) =>\n this.popupService.open(component, {\n title: roleTitle ? `${editorTitle} - ${roleTitle}` : editorTitle,\n size: 'md',\n data: {\n initialPermissions,\n showActions: !grantReadonly,\n readOnly: grantReadonly,\n },\n }),\n });\n\n const permissions = popupResult?.data;\n if (!isArray(permissions) || grantReadonly) {\n return { success: true, kind: 'object', data: null, metadata: { refresh: false } };\n }\n\n const saved = await this.grantService.saveGrant({\n existing: existingGrant,\n roleId,\n permissions: permissions as string[],\n tenantId: scope.tenantId,\n applicationId: scope.applicationId,\n });\n\n await this.showSuccessToast();\n this.grantService.notifyGrantModified(saved);\n\n return {\n success: true,\n kind: 'object',\n data: permissions as string[],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to assign permissions.';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n\n //#endregion\n\n //#region ----- Utility Methods -----\n\n private resolveRoleTitle(title: unknown): string {\n if (!title) {\n return '';\n }\n\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n if (isString(title)) {\n return resolveMultiLanguageString(title, locale).trim();\n }\n\n return resolveMultiLanguageString(String(title), locale).trim();\n }\n\n private async showSuccessToast(): Promise<void> {\n const enableOperationToasts = await this.settingsService.get<boolean>(AXPCommonSettings.EnableOperationToasts);\n if (!enableOperationToasts) {\n return;\n }\n\n this.toastService.show({\n color: 'success',\n title: await this.translationService.translateAsync('@general:workflow.entity-modified-title'),\n content: await this.translationService.translateAsync('@general:workflow.entity-modified-body'),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","/**\n * Resolves a persisted host entity id from wizard/details context (supports id, _id, string or number).\n */\nexport function resolvePersistedEntityId(ctx: Record<string, unknown> | null | undefined): string | undefined {\n if (!ctx) {\n return undefined;\n }\n const raw = ctx['id'] ?? ctx['_id'];\n if (typeof raw === 'string' && raw.length > 0) {\n return raw;\n }\n if (typeof raw === 'number' && !Number.isNaN(raw)) {\n return String(raw);\n }\n return undefined;\n}\n","//#region ----- Imports -----\n\nimport {\n AXPActionMenuItem,\n AXPExecuteCommand,\n type AXPRuntimeCommandResult,\n} from '@acorex-platform/framework-shared/core';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPLayoutDetailsViewAction } from '@acorex-platform/framework-client/layout/views';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { AXPPermissionsEditorComponent } from '../../permissions-editor/permissions-editor.component';\nimport { AXMRolePermissionGrantService } from '../../role-permission-grant.service';\nimport type { RolePermissionGrantRow } from '../../role-permission-grant.types';\nimport { resolvePersistedEntityId } from '../../resolve-persisted-entity-id.util';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Local command handled in execute(); reverts permissions to the loaded grant baseline. */\nconst ROLE_PERMISSIONS_DISCARD_COMMAND = 'Role:Permissions:Discard';\n/** Local command handled in execute(); persists the scoped RolePermission grant. */\nconst ROLE_PERMISSIONS_SAVE_COMMAND = 'Role:Permissions:Save';\n\n//#endregion\n\n//#region ----- Component -----\n\n/**\n * Role detail/create wizard page that edits scoped RolePermission grants.\n * Extends AXPPageLayoutBaseComponent for Save/Discard footer actions and dirty tracking.\n */\n@Component({\n selector: 'axm-role-permissions-page',\n standalone: true,\n imports: [AXPPermissionsEditorComponent, AXPStateMessageComponent, AXLoadingModule],\n templateUrl: './role-permissions-page.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMRolePermissionsPageComponent,\n },\n ],\n host: {\n class: 'flex h-full min-h-0 flex-1 flex-col overflow-hidden',\n },\n})\nexport class AXMRolePermissionsPageComponent extends AXPPageLayoutBaseComponent {\n //#region ----- Inputs -----\n\n rootContext = input<Record<string, unknown>>();\n /** Optional page config set by the page-component-renderer. */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ----- Services & Dependencies -----\n\n private readonly grantService = inject(AXMRolePermissionGrantService);\n private readonly hostPageLayout = inject(AXPPageLayoutBase, { optional: true, skipSelf: true });\n\n //#endregion\n\n //#region ----- State Signals -----\n\n private readonly loadedRoleId = signal<string | undefined>(undefined);\n private readonly existingGrant = signal<RolePermissionGrantRow | null>(null);\n private readonly baselinePermissions = signal<string[]>([]);\n private readonly currentPermissions = signal<string[]>([]);\n protected readonly isLoading = signal(true);\n /** Bumps when the editor should remount with a new initialPermissions snapshot (e.g. after discard). */\n protected readonly editorResetToken = signal(0);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly roleId = computed(() => resolvePersistedEntityId(this.rootContext()));\n\n protected readonly editorPermissions = computed(() => {\n // Depend on reset token so discard remounts the editor with baseline values.\n this.editorResetToken();\n return [...this.currentPermissions()];\n });\n\n protected readonly isDirty = computed(() => {\n return !this.arePermissionSetsEqual(this.baselinePermissions(), this.currentPermissions());\n });\n\n /** System RolePermission grants are seeded and not editable in product/platform UI. */\n protected readonly isGrantReadonly = computed(() => {\n const state = this.existingGrant()?.stateInfo;\n return state?.isSystem === true || state?.isImmutable === true;\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const id = this.roleId();\n // Avoid re-running when loadGrantForRole mutates its own loading/baseline signals.\n untracked(() => {\n void this.loadGrantForRole(id);\n });\n });\n }\n\n //#endregion\n\n //#region ----- Unsaved Changes -----\n\n override hasUnsavedChanges(): boolean {\n return this.isDirty();\n }\n\n //#endregion\n\n //#region ----- Page Actions -----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const discardTitle = (await this.translateService.translateAsync('@general:actions.discard.title')) ?? '';\n const saveTitle = (await this.translateService.translateAsync('@general:actions.save.title')) ?? '';\n\n const canEdit = !!this.roleId() && !this.isLoading() && !this.isGrantReadonly();\n\n const discardAction: AXPLayoutDetailsViewAction = {\n title: discardTitle,\n icon: 'fa-light fa-rotate-left',\n zone: 'footer',\n priority: 'secondary',\n color: 'default',\n visible: canEdit && this.isDirty(),\n command: {\n name: ROLE_PERMISSIONS_DISCARD_COMMAND,\n options: {},\n },\n };\n\n const saveAction: AXPLayoutDetailsViewAction = {\n title: saveTitle,\n icon: 'fa-light fa-floppy-disk',\n zone: 'footer',\n priority: 'primary',\n color: 'primary',\n visible: canEdit && this.isDirty(),\n command: {\n name: ROLE_PERMISSIONS_SAVE_COMMAND,\n options: {},\n },\n };\n\n return [discardAction, saveAction];\n }\n\n //#endregion\n\n //#region ----- Command Handling -----\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === ROLE_PERMISSIONS_DISCARD_COMMAND) {\n this.handleDiscard();\n return;\n }\n if (command.name !== ROLE_PERMISSIONS_SAVE_COMMAND) {\n return;\n }\n return this.handleSaveExecute() as unknown as Promise<void>;\n }\n\n private async handleSaveExecute(): AXPCommandExecuteResultPromise {\n const roleId = this.roleId();\n const scope = this.grantService.resolveSessionScope();\n\n if (!roleId || !scope) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const permissions = [...this.currentPermissions()];\n const saved = await this.grantService.saveGrant({\n existing: this.existingGrant(),\n roleId,\n permissions,\n tenantId: scope.tenantId,\n applicationId: scope.applicationId,\n });\n\n const nextGrant: RolePermissionGrantRow = {\n id: String(saved['id'] ?? this.existingGrant()?.id ?? ''),\n roleId,\n permissions,\n scopeInfo: (saved['scopeInfo'] as RolePermissionGrantRow['scopeInfo']) ?? this.existingGrant()?.scopeInfo,\n };\n this.existingGrant.set(nextGrant.id ? nextGrant : this.existingGrant());\n this.baselinePermissions.set([...permissions]);\n this.currentPermissions.set([...permissions]);\n this.grantService.notifyGrantModified(saved);\n this.recompute();\n\n return {\n success: true,\n kind: 'object',\n data: permissions,\n } as AXPRuntimeCommandResult;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to save permissions.';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onPermissionsChanged(permissions: string[]): void {\n if (this.arePermissionSetsEqual(this.currentPermissions(), permissions)) {\n return;\n }\n this.currentPermissions.set([...permissions]);\n this.recompute();\n }\n\n private handleDiscard(): void {\n const baseline = [...this.baselinePermissions()];\n this.currentPermissions.set(baseline);\n this.editorResetToken.update((token) => token + 1);\n this.recompute();\n }\n\n //#endregion\n\n //#region ----- Wizard step context -----\n\n /**\n * Do not merge permissions into the Role create/update payload.\n * Grants live on SecurityManagement.RolePermission only.\n */\n override getWizardStepContext(): Record<string, unknown> | null {\n return null;\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private async loadGrantForRole(roleId: string | undefined): Promise<void> {\n if (!roleId) {\n this.loadedRoleId.set(undefined);\n this.existingGrant.set(null);\n this.baselinePermissions.set([]);\n this.currentPermissions.set([]);\n this.isLoading.set(false);\n this.recompute();\n return;\n }\n\n if (roleId === this.loadedRoleId() && !this.isLoading()) {\n return;\n }\n\n this.isLoading.set(true);\n this.recompute();\n\n const scope = this.grantService.resolveSessionScope();\n if (!scope) {\n this.loadedRoleId.set(roleId);\n this.existingGrant.set(null);\n this.baselinePermissions.set([]);\n this.currentPermissions.set([]);\n this.isLoading.set(false);\n this.recompute();\n return;\n }\n\n try {\n const grant = await this.grantService.findGrant(roleId, scope.tenantId, scope.applicationId);\n const permissions = [...(grant?.permissions ?? [])];\n this.loadedRoleId.set(roleId);\n this.existingGrant.set(grant);\n this.baselinePermissions.set(permissions);\n this.currentPermissions.set([...permissions]);\n this.editorResetToken.update((token) => token + 1);\n } catch {\n this.loadedRoleId.set(roleId);\n this.existingGrant.set(null);\n this.baselinePermissions.set([]);\n this.currentPermissions.set([]);\n } finally {\n this.isLoading.set(false);\n this.recompute();\n }\n }\n\n //#endregion\n\n //#region ----- Utility Methods -----\n\n private arePermissionSetsEqual(a: string[], b: string[]): boolean {\n return isEqual([...a].sort(), [...b].sort());\n }\n\n protected override recompute(): void {\n super.recompute();\n const maybeLayout = this.hostPageLayout as unknown as { recompute?: () => void };\n maybeLayout?.recompute?.();\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (isLoading()) {\n <!-- ----- Loading grant while role permissions are fetched ----- -->\n <div class=\"flex h-full min-h-[20rem] items-center justify-center p-6\">\n <ax-loading></ax-loading>\n </div>\n}\n<!-- ----- Role must be persisted before grants can be edited ----- -->\n@else if (!roleId()) {\n <div class=\"flex h-full min-h-[20rem] items-center justify-center p-6\">\n <axp-state-message\n [title]=\"'@security-management:roles.entities.role.pages.permissions.save-role-first.title'\"\n [description]=\"'@security-management:roles.entities.role.pages.permissions.save-role-first.description'\"\n ></axp-state-message>\n </div>\n}\n<!-- ----- Full-page permissions editor for the scoped RolePermission grant ----- -->\n@else {\n <div class=\"flex h-full min-h-0 flex-1 flex-col overflow-hidden p-4\">\n <!-- ----- Remount editor when discard/load resets the selection baseline ----- -->\n @for (token of [editorResetToken()]; track token) {\n <axm-permissions-editor\n [initialPermissions]=\"editorPermissions()\"\n [readOnly]=\"isGrantReadonly()\"\n [fillHeight]=\"true\"\n (permissionsChanged)=\"onPermissionsChanged($event)\"\n ></axm-permissions-editor>\n }\n </div>\n}\n","//#region ----- Imports -----\n\nimport {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { ROLE_PERMISSIONS_PAGE_COMPONENT_KEY } from '@acorex-platform/module-security-management-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Provider -----\n\n@Injectable()\nexport class AXMRolePermissionsPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: ROLE_PERMISSIONS_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./role-permissions-page.component').then((m) => m.AXMRolePermissionsPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, computed, inject, signal, effect } from '@angular/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPPermissionDefinitionService, AXPPermissionGroupDefinition, AXPPermissionDefinition } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\ninterface PermissionPath {\n group: AXPPermissionGroupDefinition;\n path: AXPPermissionDefinition[];\n displayPath: string;\n}\n\n@Component({\n selector: 'axm-permissions-widget-view',\n template: `\n <!-- <axm-permissions-editor\n [initialPermissions]=\"getValue() || []\"\n [readOnly]=\"true\">\n </axm-permissions-editor> -->\n <div class=\"flex flex-col gap-2\">\n @for (group of groups(); track group.name) {\n @if (selectedPermissionsByGroup()[group.name]?.length) {\n <div>\n <div class=\"text-xs font-semibold mb-2 text-muted\">{{ group.title }}</div>\n <div class=\"flex gap-1 flex-wrap\">\n @for (permPath of selectedPermissionsByGroup()[group.name]; track permPath.path[permPath.path.length - 1].name) {\n <ax-badge [text]=\"permPath.displayPath\" color=\"primary\" size=\"sm\"></ax-badge>\n }\n </div>\n </div>\n }\n }\n @if (isEmpty()) {\n <axp-state-message\n icon=\"fa-light fa-shield-check\"\n [title]=\"'@security-management:permissions-feature.components.permissions-editor.empty-states.no-permissions.title'\"\n [description]=\"'@security-management:permissions-feature.components.permissions-editor.empty-states.no-permissions.description'\">\n </axp-state-message>\n }\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXTranslationModule, AXPStateMessageComponent]\n})\nexport class AXPPermissionsWidgetViewComponent extends AXPValueWidgetComponent<string[]> {\n private permissionService = inject(AXPPermissionDefinitionService);\n private readonly commandService = inject(AXPCommandService);\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n private loadGroupsEffect = effect(async () => {\n // Load groups when component initializes\n if (this.groups().length === 0) {\n const groupsData = await this.permissionService.getGroups();\n this.groups.set(groupsData);\n }\n });\n\n protected selectedPermissionsByGroup = computed(() => {\n const selected = new Set(this.getValue() ?? []);\n const result: Record<string, PermissionPath[]> = {};\n\n for (const group of this.groups()) {\n const permPaths: PermissionPath[] = [];\n\n const findPermissionPaths = (items: AXPPermissionDefinition[], path: AXPPermissionDefinition[] = []) => {\n for (const item of items) {\n const currentPath = [...path, item];\n\n if (selected.has(item.name)) {\n const displayPath = currentPath.map(p => p.title).join(' > ');\n permPaths.push({\n group,\n path: currentPath,\n displayPath\n });\n }\n\n if (item.children?.length) {\n findPermissionPaths(item.children, currentPath);\n }\n }\n };\n\n findPermissionPaths(group.permissions);\n result[group.name] = permPaths;\n }\n\n return result;\n });\n\n protected isEmpty = computed(() => {\n return Object.values(this.selectedPermissionsByGroup()).every(arr => !arr.length);\n });\n\n protected async openPermissionsEditor() {\n await this.commandService.execute('assign-permissions', {\n data: this.contextService.data(),\n entity: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n \n });\n }\n\n}\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AXPPermissionsEditorComponent } from '../permissions-editor/permissions-editor.component';\n\n@Component({\n selector: 'axm-permissions-widget-edit',\n template: `\n <axm-permissions-editor\n [initialPermissions]=\"getValue() || []\"\n [readOnly]=\"false\"\n (permissionsChanged)=\"onPermissionsChanged($event)\">\n </axm-permissions-editor>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXPPermissionsEditorComponent\n]\n})\nexport class AXPPermissionsWidgetEditComponent extends AXPValueWidgetComponent<string[]> {\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles permissions changes from the editor.\n */\n protected onPermissionsChanged(permissions: string[]): void {\n this.setValue(permissions);\n }\n // #endregion\n\n}","import { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { castArray } from 'lodash-es';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n@Component({\n selector: 'axm-permissions-widget-column',\n template: `\n <span class=\"cursor-pointer text-primary underline\" (click)=\"openPermissionsEditor()\">{{count()}} {{'@security-management:permissions-feature.terms.permissions' | translate | async}}</span>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n inputs: ['rawValue', 'rowData']\n})\nexport class AXPPermissionsWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n\n protected count = computed(() => castArray(this.rawValue).length);\n private readonly commandService = inject(AXPCommandService);\n\n async openPermissionsEditor() {\n await this.commandService.execute('assign-permissions', {\n data: this.rowData,\n entity: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n \n });\n }\n}\n","// Permission Editor Components\nexport { AXPPermissionsEditorComponent } from './permissions-editor/permissions-editor.component';\nexport { AXMAssignPermissionsCommand } from './commands/assign-permissions.command';\nexport { AXMPermissionsModule } from './permissions.module';\nexport { AXMRolePermissionGrantService } from './role-permission-grant.service';\nexport * from './pages/role-permissions-page';\n\n// Widgets\nexport * from './permissions-widget/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { AXMSecurityManagementServerCommands, AXM_JOIN_REQUEST_ERROR_CODES, norm
|
|
|
9
9
|
export { AXM_USER_APPROVE_JOIN_REQUEST_COMMAND } from '@acorex-platform/module-security-management-client/contracts';
|
|
10
10
|
import * as i0 from '@angular/core';
|
|
11
11
|
import { inject, Injectable } from '@angular/core';
|
|
12
|
-
import { A as AXMUserRoleGrantService } from './acorex-platform-module-security-management-client-user-role-grant.service-
|
|
12
|
+
import { A as AXMUserRoleGrantService } from './acorex-platform-module-security-management-client-user-role-grant.service-Dw4FWcEa.mjs';
|
|
13
13
|
import { r as resolveInvitationCommandTargets } from './acorex-platform-module-security-management-client-invitation-target.util-BAXQZwLW.mjs';
|
|
14
14
|
|
|
15
15
|
/** TM edition feature — multi-app invite/approve (ADR-TEN-001 D-05). */
|
|
@@ -319,4 +319,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
319
319
|
}] });
|
|
320
320
|
|
|
321
321
|
export { AXPApproveJoinRequestCommand };
|
|
322
|
-
//# sourceMappingURL=acorex-platform-module-security-management-client-approve-join-request.command-
|
|
322
|
+
//# sourceMappingURL=acorex-platform-module-security-management-client-approve-join-request.command-pfC6Bixs.mjs.map
|