From 6208e6482e6078e20c5445427f9bc97e1d120ab7 Mon Sep 17 00:00:00 2001 From: chvostek Date: Tue, 8 Sep 2026 13:52:32 +0200 Subject: [PATCH 1/3] [NAE-2472] Menu Item improvements - update dialog width --- projects/netgrif-components/src/lib/dialog/dialog.theme.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/netgrif-components/src/lib/dialog/dialog.theme.scss b/projects/netgrif-components/src/lib/dialog/dialog.theme.scss index 2696b13bc..d0f924772 100644 --- a/projects/netgrif-components/src/lib/dialog/dialog.theme.scss +++ b/projects/netgrif-components/src/lib/dialog/dialog.theme.scss @@ -19,7 +19,7 @@ } .dialog-task-responsive { - width: 40% !important; + width: 75% !important; height: auto !important; max-height: 95vh !important; min-height: 300px !important; From 0c55a0c6ccb233bfbe99e45a8750ef3c8b9c14fd Mon Sep 17 00:00:00 2001 From: chvostek Date: Tue, 8 Sep 2026 21:15:13 +0200 Subject: [PATCH 2/3] [NAE-2472] Menu Item improvements - fix opening available view --- .../navigation/model/group-navigation-constants.ts | 5 +++++ .../service/double-drawer-navigation.service.ts | 6 +++--- .../util/double-drawer-utils.ts | 11 ++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts b/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts index a7d347e9c..92d0e62a5 100644 --- a/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts +++ b/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts @@ -271,4 +271,9 @@ export enum GroupNavigationConstants { */ ITEM_TRANS_ID_ALL_DATA = "all_menu_data", + /** + * Configuration of a view type + */ + ITEM_FIELD_VIEW_CONFIGURATION_TYPE = "view_configuration_type", + } diff --git a/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts b/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts index a8f5a6180..71df2c3a3 100644 --- a/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts +++ b/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts @@ -314,14 +314,14 @@ export class DoubleDrawerNavigationService implements OnDestroy { return; } - if (DoubleDrawerUtils.hasItemView(this._currentNavigationItem)) { + if (DoubleDrawerUtils.isNotFolder(this._currentNavigationItem)) { // is routed by routerLink on item click return; } - let itemsWithView: Array = allItems.filter(item => DoubleDrawerUtils.hasItemView(item)); + let itemsWithView: Array = allItems.filter(item => DoubleDrawerUtils.isNotFolder(item)); if (itemsWithView.length > 0) { - this._redirectService.redirect(autoOpenItems[0].routing.path); + this._redirectService.redirect(itemsWithView[0].routing.path); } } diff --git a/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/util/double-drawer-utils.ts b/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/util/double-drawer-utils.ts index a9bb57116..f3c529eee 100644 --- a/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/util/double-drawer-utils.ts +++ b/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/util/double-drawer-utils.ts @@ -16,9 +16,10 @@ export class DoubleDrawerUtils { return item.resource?.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_IS_AUTO_SELECT)?.value; } - public static hasItemView(item: NavigationItem): boolean { - return item?.resource?.immediateData - .find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_CASE_FILTER || f.stringId === GroupNavigationConstants.ITEM_FIELD_TASK_FILTER)?.value; + public static isNotFolder(item: NavigationItem): boolean | undefined { + const type: string = item?.resource?.immediateData + .find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_VIEW_CONFIGURATION_TYPE)?.value + return !type ? undefined : type !== 'folder'; } public static isItemAndNodeEqual(item: NavigationItem, node: UriNodeResource): boolean { @@ -33,8 +34,8 @@ export class DoubleDrawerUtils { return item.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH).value === '/'; } - public static resolveAccessRoles(filter: Case, roleType: string): Array | undefined { - const allowedRoles = filter.immediateData.find(f => f.stringId === roleType)?.options; + public static resolveAccessRoles(item: Case, roleType: string): Array | undefined { + const allowedRoles = item.immediateData.find(f => f.stringId === roleType)?.options; if (!allowedRoles || Object.keys(allowedRoles).length === 0) return undefined; const roles = []; Object.keys(allowedRoles).forEach(combined => { From c1f9a7c49f7acf5cf6539a90ad9ef51eaebc6584 Mon Sep 17 00:00:00 2001 From: chvostek Date: Wed, 9 Sep 2026 10:22:53 +0200 Subject: [PATCH 3/3] [NAE-2472] Menu Item improvements - implement authority check in menu items --- .../authorization/authority/authority-guard.service.ts | 10 ++++++++++ .../lib/navigation/model/group-navigation-constants.ts | 5 +++++ .../service/double-drawer-navigation.service.ts | 7 ++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/projects/netgrif-components-core/src/lib/authorization/authority/authority-guard.service.ts b/projects/netgrif-components-core/src/lib/authorization/authority/authority-guard.service.ts index a2aea4f3c..ea3ba6e4b 100644 --- a/projects/netgrif-components-core/src/lib/authorization/authority/authority-guard.service.ts +++ b/projects/netgrif-components-core/src/lib/authorization/authority/authority-guard.service.ts @@ -6,6 +6,8 @@ import {RedirectService} from '../../routing/redirect-service/redirect.service'; import {ConfigurationService} from '../../configuration/configuration.service'; import {Observable} from 'rxjs'; import {View} from '../../../commons/schema'; +import {NavigationItem} from "../../navigation/model/navigation-configs"; +import {GroupNavigationConstants} from "../../navigation/model/group-navigation-constants"; @Injectable({ providedIn: AuthenticationModule @@ -33,4 +35,12 @@ export class AuthorityGuardService implements CanActivate { return this._userService.hasAuthority(view.access.authority); } } + + public canAccessNavigationItem(item: NavigationItem): boolean { + const allowedAuthorities: string[] = item?.resource?.immediateData?.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_ALLOWED_AUTHORITIES)?.value + if (!allowedAuthorities || allowedAuthorities.length === 0) { + return false; + } + return this._userService.hasAuthority(allowedAuthorities); + } } diff --git a/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts b/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts index 92d0e62a5..fccf6b45c 100644 --- a/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts +++ b/projects/netgrif-components-core/src/lib/navigation/model/group-navigation-constants.ts @@ -156,6 +156,11 @@ export enum GroupNavigationConstants { * */ ITEM_FIELD_ID_TASK_DEFAULT_HEADERS = 'task_default_headers', + /** + * MultichoiceMap field, that contains allowed authorities as value + * */ + ITEM_FIELD_ID_ALLOWED_AUTHORITIES = 'allowed_authorities', + /** * MultichoiceMap field, that contains allowed roles as value * */ diff --git a/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts b/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts index 71df2c3a3..938ebf909 100644 --- a/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts +++ b/projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/service/double-drawer-navigation.service.ts @@ -33,6 +33,7 @@ import { UriNodeResource } from '../../model/uri-resource'; import {MenuItemClickEvent, MenuItemLoadedEvent} from '../../model/navigation-menu-events'; import {GroupNavigationConstants} from "../../model/group-navigation-constants"; import {UserService} from "../../../user/services/user.service"; +import {AuthorityGuardService} from "../../../authorization/authority/authority-guard.service"; /** * Service for managing navigation in double-drawer @@ -91,7 +92,8 @@ export class DoubleDrawerNavigationService implements OnDestroy { protected _accessService: AccessService, protected _translateService: TranslateService, protected _dynamicRoutingService: DynamicNavigationRouteProviderService, - protected _redirectService: RedirectService) { + protected _redirectService: RedirectService, + protected _authorityGuardService: AuthorityGuardService) { this._leftItems$ = new BehaviorSubject([]); this._rightItems$ = new BehaviorSubject([]); this._moreItems$ = new BehaviorSubject([]); @@ -511,6 +513,9 @@ export class DoubleDrawerNavigationService implements OnDestroy { id: itemCase.stringId, resource: itemCase, }; + if (!this._authorityGuardService.canAccessNavigationItem(item)) { + return; + } const resolvedRoles = DoubleDrawerUtils.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_ALLOWED_ROLES); const resolvedBannedRoles = DoubleDrawerUtils.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_BANNED_ROLES); if (!!resolvedRoles) item.access['role'] = resolvedRoles;