diff --git a/src/containers/DefaultContainer.vue b/src/containers/DefaultContainer.vue index acee1809a..d218df6ae 100644 --- a/src/containers/DefaultContainer.vue +++ b/src/containers/DefaultContainer.vue @@ -110,7 +110,7 @@ export default { element: '', attributes: {}, }, - permission: permissions.VIEW_VULNERABILITY, + permissions: [permissions.VIEW_VULNERABILITY, permissions.VIEW_POLICY_VIOLATION], }, { name: this.$t('message.vulnerability_audit'), @@ -118,6 +118,12 @@ export default { icon: 'fa fa-tasks', permission: permissions.VIEW_VULNERABILITY, }, + { + name: this.$t('message.policy_violation_audit'), + url: '/policyViolationAudit', + icon: 'fa fa-fire', + permission: permissions.VIEW_POLICY_VIOLATION + }, { title: true, name: this.$t('message.administration'), @@ -198,8 +204,9 @@ export default { let array = []; for (const item of this.nav) { if ( - item.permission !== null && - permissions.hasPermission(item.permission, decodedToken) + (item.permission !== null && + permissions.hasPermission(item.permission, decodedToken)) + || (Object.prototype.hasOwnProperty.call(item, "permissions") && item.permissions.some((permission) => permissions.hasPermission(permission, decodedToken))) ) { array.push(item); } diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index d94ecc85c..923f29c7d 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -52,6 +52,7 @@ "show_suppressed_findings": "Show suppressed findings", "show_suppressed_violations": "Show suppressed violations", "state": "State", + "policies": "Policies", "policy_name": "Policy Name", "occurred_on": "Occurred On", "risk_type": "Risk Type", @@ -84,6 +85,7 @@ "audit": "Audit", "global_audit": "Global Audit", "vulnerability_audit": "Vulnerability Audit", + "policy_violation_audit": "Policy Violation Audit", "audit_vulnerabilities": "Audit Vulnerabilities", "policy_violations": "Policy Violations", "policy_violations_by_classification": "Policy Violations by Classification", diff --git a/src/router/index.js b/src/router/index.js index cb6ad0e04..101f81627 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -21,6 +21,8 @@ const LicenseList = () => import('@/views/portfolio/licenses/LicenseList'); const PolicyManagement = () => import('@/views/policy/PolicyManagement'); const Project = () => import('@/views/portfolio/projects/Project'); +const PolicyViolationAudit = () => import('@/views/audit/PolicyViolationAudit'); + const Administration = () => import('@/views/administration/Administration'); const General = () => import('@/views/administration/configuration/General'); const BomFormats = () => @@ -300,6 +302,16 @@ function configRoutes() { permission: 'POLICY_MANAGEMENT', }, }, + { + path: 'policyViolationAudit', + component: PolicyViolationAudit, + meta: { + title: i18n.t('message.policy_violation_audit'), + i18n: 'message.policy_violation_audit', + sectionPath: '/audit', + permission: 'VIEW_POLICY_VIOLATION' + } + }, { path: 'admin', component: Administration, diff --git a/src/shared/utils.js b/src/shared/utils.js index f5c30de06..9bad6c62b 100644 --- a/src/shared/utils.js +++ b/src/shared/utils.js @@ -53,6 +53,7 @@ const acceptableRootContextPaths = [ '/vulnerability', '/license', '/vulnerabilityAudit', + '/policyViolationAudit', '/login', '/change-password', ]; diff --git a/src/views/audit/PolicyViolationAudit.vue b/src/views/audit/PolicyViolationAudit.vue new file mode 100644 index 000000000..b08abcdd2 --- /dev/null +++ b/src/views/audit/PolicyViolationAudit.vue @@ -0,0 +1,357 @@ + + +