diff --git a/backend/src/database/repositories/organizationCacheRepository.ts b/backend/src/database/repositories/organizationCacheRepository.ts index 2956a2612c..972329be84 100644 --- a/backend/src/database/repositories/organizationCacheRepository.ts +++ b/backend/src/database/repositories/organizationCacheRepository.ts @@ -156,7 +156,7 @@ class OrganizationCacheRepository { replacements: { id, name: nameToCreateIdentity, - website: data.website, + website: data.website || null, }, type: QueryTypes.INSERT, transaction, diff --git a/backend/src/services/user/permissionChecker.ts b/backend/src/services/user/permissionChecker.ts index c44e244767..63fafa80a2 100644 --- a/backend/src/services/user/permissionChecker.ts +++ b/backend/src/services/user/permissionChecker.ts @@ -136,9 +136,7 @@ export default class PermissionChecker { } // Third, for project admin, we need to check if the user is admin of all segments - return this.currentSegments.every((segment) => - this.adminSegments.includes(segment.projectGroupId), - ) + return this.currentSegments.every((segment) => this.adminSegments.includes(segment.id)) }) } diff --git a/frontend/src/middleware/auth/segment-guard.js b/frontend/src/middleware/auth/segment-guard.js index 579d5e1bd9..1e4ca4579c 100644 --- a/frontend/src/middleware/auth/segment-guard.js +++ b/frontend/src/middleware/auth/segment-guard.js @@ -1,4 +1,5 @@ -import { hasAccessToProjectGroup } from '@/utils/segments'; +import { hasAccessToProjectGroup, hasAccessToSegmentId } from '@/utils/segments'; +import { useLfSegmentsStore } from '@/modules/lf/segments/store'; /** * Segment Guard @@ -19,7 +20,19 @@ export default async function ({ to, store, router }) { await store.dispatch('auth/doWaitUntilInit'); - if (!hasAccessToProjectGroup(to.params[to.meta.paramSegmentAccess])) { + const lsSegmentsStore = useLfSegmentsStore(); + const isCheckingProjectGroup = to.meta.paramSegmentAccess.name === 'grandparent'; + let hasPermission; + + if (isCheckingProjectGroup) { + await lsSegmentsStore.listAdminProjectGroups(); + + hasPermission = hasAccessToProjectGroup(to.params[to.meta.paramSegmentAccess.parameter]); + } else { + hasPermission = hasAccessToSegmentId(to.params[to.meta.paramSegmentAccess.parameter]); + } + + if (!hasPermission) { router.push('/403'); } } diff --git a/frontend/src/modules/dashboard/components/dashboard-project-group.vue b/frontend/src/modules/dashboard/components/dashboard-project-group.vue index d95c186d3c..ecef8a2d63 100644 --- a/frontend/src/modules/dashboard/components/dashboard-project-group.vue +++ b/frontend/src/modules/dashboard/components/dashboard-project-group.vue @@ -1,63 +1,72 @@