cloud-ide-core 2.0.84 → 2.0.85

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.
@@ -232,43 +232,43 @@ class CideCoreWorkflowRegistryListComponent {
232
232
  // Handle grid events
233
233
  }
234
234
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideCoreWorkflowRegistryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
235
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideCoreWorkflowRegistryListComponent, isStandalone: true, selector: "cide-core-workflow-registry-list", ngImport: i0, template: `
236
- <div class="workflow-registry-list-container">
237
- <div class="header-actions">
238
- <cide-ele-button
239
- *ngIf="canCreate()"
240
- (click)="createNew()"
241
- [variant]="'primary'">
242
- <cide-ele-icon>plus</cide-ele-icon>
243
- New Workflow Registry
244
- </cide-ele-button>
245
- </div>
246
-
247
- <cide-ele-data-grid
248
- [config]="gridConfig()"
249
- (gridEvent)="onGridEvent($event)">
250
-
251
- <ng-template #workflowDetailsRenderer let-data>
252
- <div class="workflow-details">
253
- <div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
254
- <div class="workflow-meta">
255
- <span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
256
- <span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
257
- </div>
258
- </div>
259
- </ng-template>
260
-
261
- <ng-template #statusRenderer let-data>
262
- <span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
263
- {{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
264
- </span>
265
- </ng-template>
266
-
267
- <ng-template #actionsRenderer let-data>
268
- <cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
269
- </ng-template>
270
- </cide-ele-data-grid>
271
- </div>
235
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideCoreWorkflowRegistryListComponent, isStandalone: true, selector: "cide-core-workflow-registry-list", ngImport: i0, template: `
236
+ <div class="workflow-registry-list-container">
237
+ <div class="header-actions">
238
+ <cide-ele-button
239
+ *ngIf="canCreate()"
240
+ (click)="createNew()"
241
+ [variant]="'primary'">
242
+ <cide-ele-icon>plus</cide-ele-icon>
243
+ New Workflow Registry
244
+ </cide-ele-button>
245
+ </div>
246
+
247
+ <cide-ele-data-grid
248
+ [config]="gridConfig()"
249
+ (gridEvent)="onGridEvent($event)">
250
+
251
+ <ng-template #workflowDetailsRenderer let-data>
252
+ <div class="workflow-details">
253
+ <div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
254
+ <div class="workflow-meta">
255
+ <span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
256
+ <span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
257
+ </div>
258
+ </div>
259
+ </ng-template>
260
+
261
+ <ng-template #statusRenderer let-data>
262
+ <span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
263
+ {{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
264
+ </span>
265
+ </ng-template>
266
+
267
+ <ng-template #actionsRenderer let-data>
268
+ <cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
269
+ </ng-template>
270
+ </cide-ele-data-grid>
271
+ </div>
272
272
  `, isInline: true, styles: [".workflow-registry-list-container{padding:1rem;height:100%;display:flex;flex-direction:column}.header-actions{margin-bottom:1rem}.workflow-details{display:flex;flex-direction:column;gap:.25rem}.workflow-name{font-weight:500}.workflow-meta{font-size:.875rem;color:#666;display:flex;gap:1rem}.status-active{color:green}.status-inactive{color:gray}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
273
273
  }
274
274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideCoreWorkflowRegistryListComponent, decorators: [{
@@ -279,45 +279,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
279
279
  CideEleButtonComponent,
280
280
  CideIconComponent,
281
281
  CideEleDropdownComponent
282
- ], template: `
283
- <div class="workflow-registry-list-container">
284
- <div class="header-actions">
285
- <cide-ele-button
286
- *ngIf="canCreate()"
287
- (click)="createNew()"
288
- [variant]="'primary'">
289
- <cide-ele-icon>plus</cide-ele-icon>
290
- New Workflow Registry
291
- </cide-ele-button>
292
- </div>
293
-
294
- <cide-ele-data-grid
295
- [config]="gridConfig()"
296
- (gridEvent)="onGridEvent($event)">
297
-
298
- <ng-template #workflowDetailsRenderer let-data>
299
- <div class="workflow-details">
300
- <div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
301
- <div class="workflow-meta">
302
- <span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
303
- <span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
304
- </div>
305
- </div>
306
- </ng-template>
307
-
308
- <ng-template #statusRenderer let-data>
309
- <span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
310
- {{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
311
- </span>
312
- </ng-template>
313
-
314
- <ng-template #actionsRenderer let-data>
315
- <cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
316
- </ng-template>
317
- </cide-ele-data-grid>
318
- </div>
282
+ ], template: `
283
+ <div class="workflow-registry-list-container">
284
+ <div class="header-actions">
285
+ <cide-ele-button
286
+ *ngIf="canCreate()"
287
+ (click)="createNew()"
288
+ [variant]="'primary'">
289
+ <cide-ele-icon>plus</cide-ele-icon>
290
+ New Workflow Registry
291
+ </cide-ele-button>
292
+ </div>
293
+
294
+ <cide-ele-data-grid
295
+ [config]="gridConfig()"
296
+ (gridEvent)="onGridEvent($event)">
297
+
298
+ <ng-template #workflowDetailsRenderer let-data>
299
+ <div class="workflow-details">
300
+ <div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
301
+ <div class="workflow-meta">
302
+ <span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
303
+ <span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
304
+ </div>
305
+ </div>
306
+ </ng-template>
307
+
308
+ <ng-template #statusRenderer let-data>
309
+ <span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
310
+ {{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
311
+ </span>
312
+ </ng-template>
313
+
314
+ <ng-template #actionsRenderer let-data>
315
+ <cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
316
+ </ng-template>
317
+ </cide-ele-data-grid>
318
+ </div>
319
319
  `, styles: [".workflow-registry-list-container{padding:1rem;height:100%;display:flex;flex-direction:column}.header-actions{margin-bottom:1rem}.workflow-details{display:flex;flex-direction:column;gap:.25rem}.workflow-name{font-weight:500}.workflow-meta{font-size:.875rem;color:#666;display:flex;gap:1rem}.status-active{color:green}.status-inactive{color:gray}\n"] }]
320
320
  }] });
321
321
 
322
322
  export { CideCoreWorkflowRegistryListComponent };
323
- //# sourceMappingURL=cloud-ide-core-workflow-registry-list.component-B453QJwg.mjs.map
323
+ //# sourceMappingURL=cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs","sources":["../../../projects/cloud-ide-core/src/lib/core/workflow-management/services/workflow-registry.service.ts","../../../projects/cloud-ide-core/src/lib/core/workflow-management/components/workflow-registry-list/workflow-registry-list.component.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, generateStringFromObject } from 'cloud-ide-lms-model';\n\nexport interface CreateWorkflowRegistryDto {\n wfrg_entity_id_syen?: string;\n wfrg_page_id_sypg?: string;\n wfrg_menu_id_symu?: string;\n wfrg_category_id_sygms?: string;\n wfrg_component_selector?: string;\n wfrg_component_path?: string;\n wfrg_component_query?: string;\n wfrg_view_mode_id_sygms?: string;\n wfrg_trigger_type_id_sygms?: string;\n wfrg_trigger_condition?: string;\n wfrg_auto_initialize?: boolean;\n wfrg_reinitialize_on_edit?: boolean;\n wfrg_notify_approvers_on_final_status?: boolean;\n wfrg_show_approver_names?: boolean;\n wfrg_mask_approver_info?: boolean;\n wfrg_valid_from_date?: Date;\n wfrg_valid_to_date?: Date;\n wfrg_is_active?: boolean;\n}\n\nexport interface UpdateWorkflowRegistryDto extends CreateWorkflowRegistryDto {\n wfrg_id?: string;\n}\n\nexport interface WorkflowRegistryResponse {\n success: boolean;\n message?: string;\n data?: any;\n total?: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreWorkflowRegistryService {\n private http = inject(HttpClient);\n\n /**\n * Create workflow registry\n */\n createRegistry(data: CreateWorkflowRegistryDto): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry\n ]);\n return this.http.post<WorkflowRegistryResponse>(url, data);\n }\n\n /**\n * Get workflow registry list\n */\n getRegistryList(query?: any): Observable<WorkflowRegistryResponse> {\n const queryString = query ? generateStringFromObject(query) : '';\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n queryString\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by ID\n */\n getRegistryById(id: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n id\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Update workflow registry\n */\n updateRegistry(data: UpdateWorkflowRegistryDto): Observable<WorkflowRegistryResponse> {\n if (!data.wfrg_id) {\n throw new Error('Workflow registry ID is required for update');\n }\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n data.wfrg_id\n ]);\n return this.http.put<WorkflowRegistryResponse>(url, data);\n }\n\n /**\n * Delete workflow registry\n */\n deleteRegistry(id: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n id\n ]);\n return this.http.delete<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by page ID\n */\n getRegistryByPage(pageId: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n 'by-page',\n pageId\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by menu ID\n */\n getRegistryByMenu(menuId: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n 'by-menu',\n menuId\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by category ID\n */\n getRegistryByCategory(categoryId: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n 'by-category',\n categoryId\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n}\n\n","import { Component, signal, viewChild, TemplateRef, DestroyRef, inject, computed, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideEleButtonComponent, CideIconComponent, CideEleDropdownComponent, GridConfiguration, TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, RightsService } from 'cloud-ide-layout';\nimport { CideCoreWorkflowRegistryService } from '../../services/workflow-registry.service';\n\n@Component({\n selector: 'cide-core-workflow-registry-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n template: `\n <div class=\"workflow-registry-list-container\">\n <div class=\"header-actions\">\n <cide-ele-button \n *ngIf=\"canCreate()\"\n (click)=\"createNew()\"\n [variant]=\"'primary'\">\n <cide-ele-icon>plus</cide-ele-icon>\n New Workflow Registry\n </cide-ele-button>\n </div>\n \n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n (gridEvent)=\"onGridEvent($event)\">\n \n <ng-template #workflowDetailsRenderer let-data>\n <div class=\"workflow-details\">\n <div class=\"workflow-name\">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>\n <div class=\"workflow-meta\">\n <span *ngIf=\"data.wfrg_page_id_sypg\">Page: {{ data.wfrg_page_id_sypg }}</span>\n <span *ngIf=\"data.wfrg_menu_id_symu\">Menu: {{ data.wfrg_menu_id_symu }}</span>\n </div>\n </div>\n </ng-template>\n \n <ng-template #statusRenderer let-data>\n <span [class]=\"data.wfrg_is_active ? 'status-active' : 'status-inactive'\">\n {{ data.wfrg_is_active ? 'Active' : 'Inactive' }}\n </span>\n </ng-template>\n \n <ng-template #actionsRenderer let-data>\n <cide-ele-dropdown [items]=\"getActionItems(data)\"></cide-ele-dropdown>\n </ng-template>\n </cide-ele-data-grid>\n </div>\n `,\n styles: [`\n .workflow-registry-list-container {\n padding: 1rem;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .header-actions {\n margin-bottom: 1rem;\n }\n .workflow-details {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n .workflow-name {\n font-weight: 500;\n }\n .workflow-meta {\n font-size: 0.875rem;\n color: #666;\n display: flex;\n gap: 1rem;\n }\n .status-active {\n color: green;\n }\n .status-inactive {\n color: gray;\n }\n `]\n})\nexport class CideCoreWorkflowRegistryListComponent implements OnInit {\n private destroyRef = inject(DestroyRef);\n private workflowService = inject(CideCoreWorkflowRegistryService);\n private router = inject(Router);\n private rightsService = inject(RightsService);\n\n workflows = signal<any[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n \n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n\n gridConfig = signal<GridConfiguration<any>>({\n id: 'workflow-registry-grid',\n columns: [\n { key: 'details', header: 'Workflow Details', type: 'custom', width: 'auto', renderer: 'workflowDetailsRenderer' },\n { key: 'wfrg_component_selector', header: 'Component Selector', type: 'text', width: '200px' },\n { key: 'status', header: 'Status', type: 'custom', width: '100px', renderer: 'statusRenderer' },\n { key: 'actions', header: '', type: 'custom', width: '120px', renderer: 'actionsRenderer' }\n ],\n data: [],\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search workflows...',\n searchableColumns: [],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true\n });\n\n ngOnInit(): void {\n this.loadWorkflows();\n }\n\n loadWorkflows(): void {\n this.loading.set(true);\n this.workflowService.getRegistryList()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n const workflowsData = Array.isArray(response.data) ? response.data : [];\n this.workflows.set(workflowsData);\n // Update grid config with new data\n this.gridConfig.update(config => ({\n ...config,\n data: workflowsData,\n loading: {\n ...config.loading,\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n }\n }));\n } else {\n this.error.set(response.message || 'Failed to load workflows');\n }\n this.loading.set(false);\n },\n error: (err) => {\n this.error.set('Failed to load workflows');\n this.loading.set(false);\n }\n });\n }\n\n createNew(): void {\n this.router.navigate(['/core/workflow-registry/create']);\n }\n\n editWorkflow(workflow: any): void {\n this.router.navigate(['/core/workflow-registry/edit', workflow.wfrg_id]);\n }\n\n deleteWorkflow(workflow: any): void {\n if (confirm('Are you sure you want to delete this workflow?')) {\n this.workflowService.deleteRegistry(workflow.wfrg_id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadWorkflows();\n }\n }\n });\n }\n }\n\n getActionItems(workflow: any): any[] {\n const items: any[] = [];\n if (this.canEdit()) {\n items.push({ label: 'Edit', action: () => this.editWorkflow(workflow) });\n }\n if (this.canDelete()) {\n items.push({ label: 'Delete', action: () => this.deleteWorkflow(workflow) });\n }\n return items;\n }\n\n onGridEvent(event: any): void {\n // Handle grid events\n }\n}\n\n"],"names":[],"mappings":"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"}
@@ -261,7 +261,7 @@ const coreRoutes = [
261
261
  // Workflow Management Routes
262
262
  {
263
263
  path: 'workflow-registry',
264
- loadComponent: () => import('./cloud-ide-core-workflow-registry-list.component-B453QJwg.mjs').then(c => c.CideCoreWorkflowRegistryListComponent),
264
+ loadComponent: () => import('./cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs').then(c => c.CideCoreWorkflowRegistryListComponent),
265
265
  title: 'Workflow Registry',
266
266
  canActivate: [authGuard],
267
267
  data: {
@@ -12233,21 +12233,41 @@ class CideCoreUserCreateComponent {
12233
12233
  });
12234
12234
  }
12235
12235
  });
12236
- // Also check all existing exceptions from DB that might not be in current menu rights
12236
+ // CRITICAL: Process ALL existing exceptions from DB, even if not in current menu rights
12237
12237
  // This ensures we don't miss any exceptions that should be deleted
12238
12238
  existingExceptions.forEach((existingException) => {
12239
12239
  if (existingException._id) {
12240
12240
  const exceptionKey = `${existingException.syusrex_user_entity_mapping_id_syenm || ''}_${existingException.syusrex_menu_id_syme || ''}_${existingException.syusrex_role_permissions_id_sygms || ''}`;
12241
- // If this exception wasn't processed above, check if it should be deleted
12241
+ // If this exception wasn't processed above, we need to decide what to do with it
12242
12242
  if (!processedExceptionKeys.has(exceptionKey)) {
12243
- // Find the corresponding menu and permission to check if it matches role
12243
+ // Find the corresponding menu and permission to check current state
12244
12244
  const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];
12245
12245
  const menu = menuRights.find((m) => m._id === existingException.syusrex_menu_id_syme);
12246
12246
  if (menu && menu._permissionValues) {
12247
+ // Menu exists in current rights - check permission state
12247
12248
  const permissionId = existingException.syusrex_role_permissions_id_sygms?.toString() || '';
12248
12249
  const permissionData = menu._permissionValues[permissionId];
12249
- if (permissionData && permissionData.modified === permissionData.actual) {
12250
- // Permission matches role, but exception exists - mark for deletion
12250
+ if (permissionData) {
12251
+ // Permission exists - if modified === actual, delete the exception
12252
+ if (permissionData.modified === permissionData.actual) {
12253
+ const exceptionToDelete = {
12254
+ _id: existingException._id,
12255
+ syusrex_user_id_user: this.userId() || '',
12256
+ syusrex_user_entity_mapping_id_syenm: mapping._id || '',
12257
+ syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',
12258
+ syusrex_role_permissions_id_sygms: permissionId,
12259
+ syusrex_menu_id_syme: menu._id || '',
12260
+ syusrex_isactive: true,
12261
+ syusrex_status: false,
12262
+ isDelete: true
12263
+ };
12264
+ exceptions.push(exceptionToDelete);
12265
+ console.log(`🗑️ Exception marked for deletion (permission matches role): ${existingException._id}`);
12266
+ }
12267
+ // If modified !== actual, it should have been processed above, so we don't need to do anything
12268
+ }
12269
+ else {
12270
+ // Permission doesn't exist in menu - this shouldn't happen, but mark for deletion to be safe
12251
12271
  const exceptionToDelete = {
12252
12272
  _id: existingException._id,
12253
12273
  syusrex_user_id_user: this.userId() || '',
@@ -12260,9 +12280,26 @@ class CideCoreUserCreateComponent {
12260
12280
  isDelete: true
12261
12281
  };
12262
12282
  exceptions.push(exceptionToDelete);
12263
- console.log(`🗑️ Exception marked for deletion (orphaned/not in menu rights): ${existingException._id}`);
12283
+ console.log(`🗑️ Exception marked for deletion (permission not found in menu): ${existingException._id}`);
12264
12284
  }
12265
12285
  }
12286
+ else {
12287
+ // Menu doesn't exist in current rights - mark for deletion
12288
+ // This handles cases where menu was removed or user no longer has access
12289
+ const exceptionToDelete = {
12290
+ _id: existingException._id,
12291
+ syusrex_user_id_user: this.userId() || '',
12292
+ syusrex_user_entity_mapping_id_syenm: mapping._id || '',
12293
+ syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',
12294
+ syusrex_role_permissions_id_sygms: existingException.syusrex_role_permissions_id_sygms?.toString() || '',
12295
+ syusrex_menu_id_syme: existingException.syusrex_menu_id_syme?.toString() || '',
12296
+ syusrex_isactive: true,
12297
+ syusrex_status: false,
12298
+ isDelete: true
12299
+ };
12300
+ exceptions.push(exceptionToDelete);
12301
+ console.log(`🗑️ Exception marked for deletion (menu not in current rights): ${existingException._id}`);
12302
+ }
12266
12303
  }
12267
12304
  }
12268
12305
  });
@@ -12671,7 +12708,7 @@ class CideCoreUserCreateComponent {
12671
12708
  key: 'syme_permissions_id_sygms',
12672
12709
  header: 'Permissions',
12673
12710
  type: 'custom',
12674
- width: '200px',
12711
+ width: '300px',
12675
12712
  truncate: true,
12676
12713
  align: 'left',
12677
12714
  renderer: 'permissionsRenderer'