Skip to content

Commit fa719eb

Browse files
rushk014xingzhang-suse
authored andcommitted
fix(rbac): Fix blank Compliance/Vulnerabilities/Security Events requiring manual refresh for restricted users (#209)
- Fix nvVariables.ns defaulting to NV_SCHEMA instead of NV_POD_NAMESPACE (typo introduced in NVSHAS-9432 broke API calls for restricted users) - Add null guards in preprocessCompliance for entity lookups filtered by RBAC - Guard mapWorkloadService against missing workloadMap entries - Initialize complianceData/vulQueryData to null to prevent premature rendering - Call params.failCallback() in VulnerabilityItemsGrid on fetch error
1 parent b433b86 commit fa719eb

5 files changed

Lines changed: 15 additions & 8 deletions

File tree

pkg/neuvector-ui-ext/components/Compliance/Compliance.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
node: 0,
6565
container: 0,
6666
},
67-
complianceData: Object,
67+
complianceData: null,
6868
domains: Array,
6969
availableFilters: null,
7070
errorRes: null,
@@ -145,7 +145,9 @@
145145
let services = new Set();
146146
item.workloads.forEach(workload => {
147147
let workloadDetails = this.workloadMap.get(workload.id);
148-
services.add(workloadDetails.service);
148+
if (workloadDetails) {
149+
services.add(workloadDetails.service);
150+
}
149151
});
150152
item.services = Array.from(services);
151153
return item;

pkg/neuvector-ui-ext/components/Vulnerabilities/Vulnerabilities.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
vulQuery: initVulQuery(),
7272
pieChartActive: false,
7373
selectedVul: null,
74-
vulQueryData: Object,
74+
vulQueryData: null,
7575
domains: Array,
7676
errorRes: null,
7777
};

pkg/neuvector-ui-ext/components/Vulnerabilities/grids/VulnerabilityItemsGrid.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
})
8080
.catch(err => {
8181
console.log(err);
82+
params.failCallback();
8283
})
8384
},
8485
}

pkg/neuvector-ui-ext/types/neuvector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ export const NV_MAP = {
845845

846846
export const nvVariables = {
847847
currentCluster: '',
848-
ns: NV_CONST.NV_SCHEMA,
848+
ns: NV_CONST.NV_POD_NAMESPACE,
849849
authToken: '',
850850
user: {} as any,
851851
isRemote: false,

pkg/neuvector-ui-ext/utils/compliance.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,37 +250,41 @@ export function preprocessCompliance(complianceData: any) {
250250
complianceData.compliances.forEach((compliance: any) => {
251251
let domains = new Set();
252252
compliance.nodes = compliance.nodes.map((nodeId: any) => {
253+
if (!complianceData.nodes?.[nodeId]?.[0]) return null;
253254
complianceData.nodes[nodeId][0].id = nodeId;
254255
complianceData.nodes[nodeId][0].domains?.forEach((domain: any) => {
255256
domains.add(domain);
256257
});
257258
return complianceData.nodes[nodeId][0];
258-
});
259+
}).filter((item: any) => item !== null);
259260
compliance.workloads = compliance.workloads.map((workloadId: any) => {
261+
if (!complianceData.workloads?.[workloadId]?.[0]) return null;
260262
complianceData.workloads[workloadId][0].id = workloadId;
261263
complianceData.workloads[workloadId][0].domains?.forEach(
262264
(domain: any) => {
263265
domains.add(domain);
264266
}
265267
);
266268
return complianceData.workloads[workloadId][0];
267-
});
269+
}).filter((item: any) => item !== null);
268270
compliance.platforms = compliance.platforms.map((platformId: any) => {
271+
if (!complianceData.platforms?.[platformId]?.[0]) return null;
269272
complianceData.platforms[platformId][0].id = platformId;
270273
complianceData.platforms[platformId][0].domains?.forEach(
271274
(domain: any) => {
272275
domains.add(domain);
273276
}
274277
);
275278
return complianceData.platforms[platformId][0];
276-
});
279+
}).filter((item: any) => item !== null);
277280
compliance.images = compliance.images.map((imageId: any) => {
281+
if (!complianceData.images?.[imageId]?.[0]) return null;
278282
complianceData.images[imageId][0].id = imageId;
279283
complianceData.images[imageId][0].domains?.forEach((domain: any) => {
280284
domains.add(domain);
281285
});
282286
return complianceData.images[imageId][0];
283-
});
287+
}).filter((item: any) => item !== null);
284288
compliance.domains = [...domains];
285289
compliance.images.sort(sortByDisplayName);
286290
compliance.workloads.sort(sortByDisplayName);

0 commit comments

Comments
 (0)