diff --git a/src/containers/DefaultContainer.vue b/src/containers/DefaultContainer.vue index 845b05f4..9190536d 100644 --- a/src/containers/DefaultContainer.vue +++ b/src/containers/DefaultContainer.vue @@ -102,6 +102,12 @@ export default { icon: 'fa fa-balance-scale', permission: permissions.VIEW_PORTFOLIO, }, + { + name: 'Tags', + url: '/tags', + icon: 'fa fa-tag', + permission: permissions.VIEW_PORTFOLIO, + }, { title: true, name: this.$t('message.global_audit'), diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index f10da4ed..e9831aa0 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -691,6 +691,7 @@ "password_unauthorized": "Überprüfen Sie die aktuellen Anmeldeinformationen und versuchen Sie es erneut", "phone": "Telefon", "policies": "Richtlinien", + "policies_tagged_with": "Richtlinien mit dem Tag {tag}", "policy_bundle_hash": "Paket-Hash", "policy_bundle_info": "Paket-Info", "policy_bundle_sync": "Paket synchronisieren", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Projektschwachstellen", "projects": "Projekte", "projects_at_risk": "Gefährdete Projekte", + "projects_tagged_with": "Projekte mit dem Tag {tag}", "properties": "Eigenschaften", "property_created": "Eigenschaft erstellt", "property_deleted": "Eigenschaft gelöscht", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 42d25756..1b791d40 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -691,6 +691,7 @@ "password_unauthorized": "Check current login credentials and try again", "phone": "Phone", "policies": "Policies", + "policies_tagged_with": "Policies tagged with {tag}", "policy_bundle_hash": "Bundle Hash", "policy_bundle_info": "Bundle Info", "policy_bundle_sync": "Sync Bundle", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Project Vulnerabilities", "projects": "Projects", "projects_at_risk": "Projects at Risk", + "projects_tagged_with": "Projects tagged with {tag}", "properties": "Properties", "property_created": "Property created", "property_deleted": "Property deleted", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 1b0b6e46..611189d5 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -691,6 +691,7 @@ "password_unauthorized": "Verifique las credenciales de inicio de sesión actuales e inténtelo nuevamente", "phone": "Teléfono", "policies": "Políticas", + "policies_tagged_with": "Políticas etiquetadas con {tag}", "policy_bundle_hash": "paquete de hash", "policy_bundle_info": "Información del paquete", "policy_bundle_sync": "Paquete de sincronización", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Vulnerabilidades del proyecto", "projects": "Proyectos", "projects_at_risk": "Proyectos en riesgo", + "projects_tagged_with": "Proyectos etiquetados con {tag}", "properties": "Propiedades", "property_created": "Propiedad creada", "property_deleted": "Propiedad eliminada", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index d2d31868..4ab17cbb 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -691,6 +691,7 @@ "password_unauthorized": "Vérifiez les informations de connexion actuelles et réessayez", "phone": "Téléphone", "policies": "Politiques", + "policies_tagged_with": "Règles marquées avec {tag}", "policy_bundle_hash": "Hachage groupé", "policy_bundle_info": "Informations sur le forfait", "policy_bundle_sync": "Pack de synchronisation", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Vulnérabilités du projet", "projects": "Projets", "projects_at_risk": "Projets à risque", + "projects_tagged_with": "Projets marqués avec {tag}", "properties": "Propriétés", "property_created": "Propriété créée", "property_deleted": "Propriété supprimée", diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index 5d567ccc..53157a24 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -691,6 +691,7 @@ "password_unauthorized": "वर्तमान लॉगिन क्रेडेंशियल जांचें और पुनः प्रयास करें", "phone": "फ़ोन", "policies": "नीतियों", + "policies_tagged_with": "{tag} के साथ टैग की गईं नीतियां", "policy_bundle_hash": "बंडल हैश", "policy_bundle_info": "बंडल जानकारी", "policy_bundle_sync": "सिंक बंडल", @@ -727,6 +728,7 @@ "project_vulnerabilities": "परियोजना की कमज़ोरियाँ", "projects": "परियोजनाओं", "projects_at_risk": "जोखिम में परियोजनाएँ", + "projects_tagged_with": "{tag} के साथ टैग किए गए प्रोजेक्ट", "properties": "गुण", "property_created": "संपत्ति बनाई गई", "property_deleted": "संपत्ति हटा दी गई", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 3dabd757..04721ffc 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -691,6 +691,7 @@ "password_unauthorized": "Controlla le credenziali di accesso attuali e riprova", "phone": "Telefono", "policies": "Politiche", + "policies_tagged_with": "Politiche contrassegnate con {tag}", "policy_bundle_hash": "Pacchetto Hash", "policy_bundle_info": "Informazioni sul pacchetto", "policy_bundle_sync": "Pacchetto di sincronizzazione", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Vulnerabilità del progetto", "projects": "Progetti", "projects_at_risk": "Progetti a rischio", + "projects_tagged_with": "Progetti taggati con {tag}", "properties": "Proprietà", "property_created": "Proprietà creata", "property_deleted": "Proprietà eliminata", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index eb31e376..c43bc22f 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -691,6 +691,7 @@ "password_unauthorized": "現在のログイン資格情報を確認して、もう一度お試しください", "phone": "電話", "policies": "ポリシー", + "policies_tagged_with": "{tag} でタグ付けされたポリシー", "policy_bundle_hash": "バンドルハッシュ", "policy_bundle_info": "バンドル情報", "policy_bundle_sync": "同期バンドル", @@ -727,6 +728,7 @@ "project_vulnerabilities": "プロジェクトの脆弱性", "projects": "プロジェクト", "projects_at_risk": "リスクのあるプロジェクト", + "projects_tagged_with": "{tag} でタグ付けされたプロジェクト", "properties": "プロパティ", "property_created": "プロパティが作成されました", "property_deleted": "プロパティが削除されました", diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json index 20459894..13548a3e 100644 --- a/src/i18n/locales/pl.json +++ b/src/i18n/locales/pl.json @@ -691,6 +691,7 @@ "password_unauthorized": "Sprawdź aktualne dane logowania i spróbuj ponownie", "phone": "Telefon", "policies": "Zasady", + "policies_tagged_with": "Zasady oznaczone tagiem {tag}", "policy_bundle_hash": "Hash pakietu", "policy_bundle_info": "Informacje o pakiecie", "policy_bundle_sync": "Pakiet synchronizacji", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Luki w zabezpieczeniach projektu", "projects": "Projektowanie", "projects_at_risk": "Projekty zagrożone", + "projects_tagged_with": "Projekty oznaczone tagiem {tag}", "properties": "Nieruchomości", "property_created": "Właściwość utworzona", "property_deleted": "Właściwość usunięta", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 265f9ef7..59191611 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -691,6 +691,7 @@ "password_unauthorized": "Verifique as credenciais de login atuais e tente novamente", "phone": "Telefone", "policies": "Políticas", + "policies_tagged_with": "Políticas marcadas com {tag}", "policy_bundle_hash": "Hash do pacote", "policy_bundle_info": "Informações do pacote", "policy_bundle_sync": "Pacote de sincronização", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Vulnerabilidades do projeto", "projects": "Projetos", "projects_at_risk": "Projetos em risco", + "projects_tagged_with": "Projetos marcados com {tag}", "properties": "Propriedades", "property_created": "Propriedade criada", "property_deleted": "Propriedade excluída", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index 42d4cc5b..deadda9e 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -691,6 +691,7 @@ "password_unauthorized": "Verifique as credenciais de login atuais e tente novamente", "phone": "Telefone", "policies": "Políticas", + "policies_tagged_with": "Políticas marcadas com {tag}", "policy_bundle_hash": "Hash do pacote", "policy_bundle_info": "Informações do pacote", "policy_bundle_sync": "Pacote de sincronização", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Vulnerabilidades do projeto", "projects": "Projetos", "projects_at_risk": "Projetos em risco", + "projects_tagged_with": "Projetos marcados com {tag}", "properties": "Propriedades", "property_created": "Propriedade criada", "property_deleted": "Propriedade excluída", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index dd2e714c..75df7275 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -691,6 +691,7 @@ "password_unauthorized": "Проверьте текущие учетные данные для входа и повторите попытку.", "phone": "Телефон", "policies": "Политика", + "policies_tagged_with": "Политики с тегом {tag}", "policy_bundle_hash": "Пакетный хеш", "policy_bundle_info": "Информация о пакете", "policy_bundle_sync": "Пакет синхронизации", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Уязвимости проекта", "projects": "Проекты", "projects_at_risk": "Проекты под угрозой", + "projects_tagged_with": "Проекты с тегом {tag}", "properties": "Характеристики", "property_created": "Объект создан", "property_deleted": "Ресурс удален.", diff --git a/src/i18n/locales/uk-UA.json b/src/i18n/locales/uk-UA.json index 5edee440..560de1f0 100644 --- a/src/i18n/locales/uk-UA.json +++ b/src/i18n/locales/uk-UA.json @@ -691,6 +691,7 @@ "password_unauthorized": "Перевірте поточні облікові дані для входу та повторіть спробу", "phone": "Телефон", "policies": "політики", + "policies_tagged_with": "Правила з тегом {tag}", "policy_bundle_hash": "Хеш пакета", "policy_bundle_info": "Інформація про пакет", "policy_bundle_sync": "Пакет синхронізації", @@ -727,6 +728,7 @@ "project_vulnerabilities": "Уразливості проекту", "projects": "Проекти", "projects_at_risk": "Проекти під загрозою", + "projects_tagged_with": "Проекти з тегом {tag}", "properties": "Властивості", "property_created": "Власність створена", "property_deleted": "Власність видалено", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index 4a6feac0..f5fa301e 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -691,6 +691,7 @@ "password_unauthorized": "检查当前登录凭据并重试", "phone": "电话", "policies": "策略", + "policies_tagged_with": "带有 {tag} 标记的政策", "policy_bundle_hash": "捆绑哈希", "policy_bundle_info": "捆绑信息", "policy_bundle_sync": "同步包", @@ -727,6 +728,7 @@ "project_vulnerabilities": "项目漏洞", "projects": "项目", "projects_at_risk": "面临风险的项目", + "projects_tagged_with": "带有 {tag} 标记的项目", "properties": "属性", "property_created": "创建的财产", "property_deleted": "属性已删除", diff --git a/src/router/index.js b/src/router/index.js index 4cda5bf6..50f66644 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -11,6 +11,7 @@ const DefaultContainer = () => import('@/containers/DefaultContainer'); // Views const Dashboard = () => import('@/views/Dashboard'); const ProjectList = () => import('@/views/portfolio/projects/ProjectList'); +const TagList = () => import('@/views/portfolio/tags/TagList.vue'); const ComponentSearch = () => import('@/views/portfolio/components/ComponentSearch'); const VulnerabilityList = () => @@ -266,6 +267,17 @@ function configRoutes() { permissions: ['VIEW_PORTFOLIO'], }, }, + { + path: 'tags', + name: 'Tags', + component: TagList, + meta: { + title: i18n.t('message.tags'), + i18n: 'message.tags', + sectionPath: '/tags', + permission: 'VIEW_PORTFOLIO', + }, + }, { path: 'licenses', name: 'Licenses', diff --git a/src/views/administration/accessmanagement/SelectProjectModal.vue b/src/views/administration/accessmanagement/SelectProjectModal.vue index cec8d52f..c21a4ee4 100644 --- a/src/views/administration/accessmanagement/SelectProjectModal.vue +++ b/src/views/administration/accessmanagement/SelectProjectModal.vue @@ -44,6 +44,7 @@ import xssFilters from 'xss-filters'; import permissionsMixin from '../../../mixins/permissionsMixin'; import common from '../../../shared/common'; import { Switch as cSwitch } from '@coreui/vue'; +import router from '@/router'; export default { mixins: [permissionsMixin], @@ -70,16 +71,20 @@ export default { title: this.$t('message.project_name'), field: 'name', sortable: true, - formatter(value, row, index) { - let url = xssFilters.uriInUnQuotedAttr('../projects/' + row.uuid); - return `${xssFilters.inHTMLData(value)}`; + formatter(value, row) { + // TODO: Close modal when link is clicked. + const href = router.resolve({ + name: 'Project', + params: { uuid: row.uuid }, + }).href; + return `${xssFilters.inHTMLData(value)}`; }, }, { title: this.$t('message.version'), field: 'version', sortable: true, - formatter(value, row, index) { + formatter(value) { return xssFilters.inHTMLData(common.valueWithDefault(value, '')); }, }, diff --git a/src/views/portfolio/tags/TagList.vue b/src/views/portfolio/tags/TagList.vue new file mode 100644 index 00000000..cf361b42 --- /dev/null +++ b/src/views/portfolio/tags/TagList.vue @@ -0,0 +1,136 @@ + + + diff --git a/src/views/portfolio/tags/TaggedPoliciesListModal.vue b/src/views/portfolio/tags/TaggedPoliciesListModal.vue new file mode 100644 index 00000000..54987280 --- /dev/null +++ b/src/views/portfolio/tags/TaggedPoliciesListModal.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/views/portfolio/tags/TaggedProjectListModal.vue b/src/views/portfolio/tags/TaggedProjectListModal.vue new file mode 100644 index 00000000..dccff705 --- /dev/null +++ b/src/views/portfolio/tags/TaggedProjectListModal.vue @@ -0,0 +1,102 @@ + + +