diff --git a/apps/wallet/src/components/policies/ApprovalRulesTab.vue b/apps/wallet/src/components/policies/ApprovalRulesTab.vue index 17493d26e..e4ec60981 100644 --- a/apps/wallet/src/components/policies/ApprovalRulesTab.vue +++ b/apps/wallet/src/components/policies/ApprovalRulesTab.vue @@ -104,6 +104,7 @@ import { import { useStationStore } from '~/stores/station.store'; import { Privilege } from '~/types/auth.types'; import { ExtractOk } from '~/types/helper.types'; +import { hasRequiredPrivilege } from '~/utils/auth.utils'; import { throttle, variantIs } from '~/utils/helper.utils'; const station = useStationStore(); @@ -118,6 +119,10 @@ const triggerSearch = throttle(() => (forceReload.value = true), 500); const allPolicies = ref(null); const mounted = ref(false); +const canLoadLinkedPolicies = computed(() => { + return hasRequiredPrivilege({ anyOf: [Privilege.ListRequestPolicies] }); +}); + const headers = computed(() => { return [ { title: i18n.t('terms.name'), key: 'name', sortable: false }, @@ -126,11 +131,15 @@ const headers = computed(() => { ? [] : [ { title: i18n.t('terms.rule'), key: 'rule', sortable: false }, - { - title: i18n.t('pages.approval_rules.linked_policies'), - key: 'linked_policies', - sortable: false, - }, + ...(canLoadLinkedPolicies.value + ? [ + { + title: i18n.t('pages.approval_rules.linked_policies'), + key: 'linked_policies', + sortable: false, + }, + ] + : []), ]), { title: '', key: 'actions', sortable: false }, ]; @@ -198,23 +207,25 @@ onMounted(async () => { componentUnmounted = true; }); - let offset = 0; - let result: ExtractOk; - do { - result = await station.service.listRequestPolicies({ - limit: 100, - offset: offset, - }); - fetchedPolicies.push(...result.policies); - if (result.next_offset.length === 0 || componentUnmounted) { - break; - } + if (canLoadLinkedPolicies.value) { + let offset = 0; + let result: ExtractOk; + do { + result = await station.service.listRequestPolicies({ + limit: 100, + offset: offset, + }); + fetchedPolicies.push(...result.policies); + if (result.next_offset.length === 0 || componentUnmounted) { + break; + } - offset = Number(result.next_offset); - } while (result.total > fetchedPolicies.length); + offset = Number(result.next_offset); + } while (result.total > fetchedPolicies.length); - if (!componentUnmounted) { - allPolicies.value = fetchedPolicies; + if (!componentUnmounted) { + allPolicies.value = fetchedPolicies; + } } }); diff --git a/apps/wallet/src/locales/en.locale.ts b/apps/wallet/src/locales/en.locale.ts index 5e2a14292..baa587c8a 100644 --- a/apps/wallet/src/locales/en.locale.ts +++ b/apps/wallet/src/locales/en.locale.ts @@ -1218,9 +1218,9 @@ export default { permission_update_description: 'Grants full control over wallet permissions, including adding, updating, and removing permissions.', - requestpolicy_list: 'View Request Policies Page', + requestpolicy_list: 'View Request Policies Tab', requestpolicy_list_description: - 'Grants access to the request policies page, showing only policies the user can view.', + 'Grants access to the request policies tab, showing only policies the user can view.', requestpolicy_read_any: 'View All Request Policies', requestpolicy_read_any_description: 'Allows viewing of all request policies and their details.', @@ -1239,18 +1239,18 @@ export default { request_read_any_description: 'Enables viewing of all requests, including those submitted by other users.', - namedrule_list: 'View Approval Policies Page', + namedrule_list: 'View Approval Rules Tab', namedrule_list_description: - 'Grants access to the approval policies page, showing only policies the user can view.', - namedrule_read_any: 'View All Approval Policies', - namedrule_read_any_description: 'Allows viewing of all approval policies and their details.', + 'Grants access to the approval rules tab, showing only rules the user can view.', + namedrule_read_any: 'View All Approval Rules', + namedrule_read_any_description: 'Allows viewing of all approval rules and their details.', - namedrule_create: 'Add New Approval Policies', - namedrule_create_description: 'Enables adding new approval policies to the wallet.', - namedrule_update_any: 'Edit Approval Policies', - namedrule_update_any_description: 'Grants permission to modify approval policies.', - namedrule_delete_any: 'Delete Approval Policies', - namedrule_delete_any_description: 'Allows deleting approval policies.', + namedrule_create: 'Add New Approval Rules', + namedrule_create_description: 'Enables adding new approval rules to the wallet.', + namedrule_update_any: 'Edit Approval Rules', + namedrule_update_any_description: 'Grants permission to modify approval rules.', + namedrule_delete_any: 'Delete Approval Rules', + namedrule_delete_any_description: 'Allows deleting approval rules.', }, }, request_policies: { diff --git a/apps/wallet/src/locales/fr.locale.ts b/apps/wallet/src/locales/fr.locale.ts index 557f17254..c66acb5c7 100644 --- a/apps/wallet/src/locales/fr.locale.ts +++ b/apps/wallet/src/locales/fr.locale.ts @@ -1238,9 +1238,9 @@ export default { permission_update_description: 'Permet de modifier les autorisations pour les ressources et les actions spécifiées.', - requestpolicy_list: 'Voir la Page des Politiques de Demande', + requestpolicy_list: "Voir l'Onglet des Politiques de Demande", requestpolicy_list_description: - "Permet d'accéder à la page des politiques de demande, mais affiche uniquement les politiques que l'utilisateur est autorisé à voir.", + "Permet d'accéder à l'onglet des politiques de demande, en affichant uniquement les politiques que l'utilisateur est autorisé à voir.", requestpolicy_read_any: 'Voir Toutes les Politiques de Demande', requestpolicy_read_any_description: "Permet d'afficher toutes les politiques de demande et leurs détails.", @@ -1260,19 +1260,19 @@ export default { request_read_any_description: "Permet d'afficher toutes les demandes, y compris celles soumises par d'autres utilisateurs.", - namedrule_list: 'Voir la Page des Politiques d approbation', + namedrule_list: "Voir l'Onglet des Règles d'Approbation", namedrule_list_description: - "Permet d'accéder à la page des politiques d'approbation, en affichant uniquement les politiques que l'utilisateur est autorisé à voir.", - namedrule_read_any: 'Voir Toutes les Politiques d approbation', + "Permet d'accéder à l'onglet des règles d'approbation, en affichant uniquement les règles que l'utilisateur est autorisé à voir.", + namedrule_read_any: "Voir Toutes les Règles d'Approbation", namedrule_read_any_description: - "Permet d'afficher toutes les politiques d'approbation et leurs détails.", - namedrule_create: 'Ajouter de Nouvelles Politiques d approbation', + "Permet d'afficher toutes les règles d'approbation et leurs détails.", + namedrule_create: "Ajouter de Nouvelles Règles d'Approbation", namedrule_create_description: - "Permet d'ajouter de nouvelles politiques d'approbation au portefeuille.", - namedrule_update_any: 'Modifier les Politiques d approbation', - namedrule_update_any_description: 'Permet de modifier les politiques d approbation.', - namedrule_delete_any: 'Supprimer les Politiques d approbation', - namedrule_delete_any_description: 'Permet de supprimer les politiques d approbation.', + "Permet d'ajouter de nouvelles règles d'approbation au portefeuille.", + namedrule_update_any: "Modifier les Règles d'Approbation", + namedrule_update_any_description: "Permet de modifier les règles d'approbation.", + namedrule_delete_any: "Supprimer les Règles d'Approbation", + namedrule_delete_any_description: "Permet de supprimer les règles d'approbation.", }, }, request_policies: { diff --git a/apps/wallet/src/locales/pt.locale.ts b/apps/wallet/src/locales/pt.locale.ts index 35f21b1c3..2e2710e39 100644 --- a/apps/wallet/src/locales/pt.locale.ts +++ b/apps/wallet/src/locales/pt.locale.ts @@ -1233,9 +1233,9 @@ export default { permission_update_description: 'Concede controle total sobre as permissões da carteira, incluindo adicionar, atualizar e remover permissões.', - requestpolicy_list: 'Ver Página de Políticas de Solicitação', + requestpolicy_list: 'Ver Aba de Políticas de Solicitação', requestpolicy_list_description: - 'Permite acessar a página de políticas de solicitação, exibindo apenas as políticas que o usuário pode visualizar.', + 'Permite acessar a aba de políticas de solicitação, exibindo apenas as políticas que o usuário pode visualizar.', requestpolicy_read_any: 'Ver Todas as Políticas de Solicitação', requestpolicy_read_any_description: 'Permite visualizar todas as políticas de solicitação e seus detalhes.', @@ -1255,19 +1255,19 @@ export default { request_read_any_description: 'Permite visualizar todas as solicitações, incluindo aquelas enviadas por outros usuários.', - namedrule_list: 'Ver Página de Políticas de Aprovação', + namedrule_list: 'Ver Aba de Regras de Aprovação', namedrule_list_description: - 'Permite acessar a página de políticas de aprovação, exibindo apenas as políticas que o usuário pode visualizar.', - namedrule_read_any: 'Ver Todas as Políticas de Aprovação', + 'Permite acessar a aba de regras de aprovação, exibindo apenas as regras que o usuário pode visualizar.', + namedrule_read_any: 'Ver Todas as Regras de Aprovação', namedrule_read_any_description: - 'Permite visualizar todas as políticas de aprovação e seus detalhes.', + 'Permite visualizar todas as regras de aprovação e seus detalhes.', - namedrule_create: 'Adicionar Novas Políticas de Aprovação', - namedrule_create_description: 'Permite adicionar novas políticas de aprovação à carteira.', - namedrule_update_any: 'Editar Políticas de Aprovação', - namedrule_update_any_description: 'Permite modificar as políticas de aprovação.', - namedrule_delete_any: 'Excluir Políticas de Aprovação', - namedrule_delete_any_description: 'Permite excluir políticas de aprovação.', + namedrule_create: 'Adicionar Novas Regras de Aprovação', + namedrule_create_description: 'Permite adicionar novas regras de aprovação à carteira.', + namedrule_update_any: 'Editar Regras de Aprovação', + namedrule_update_any_description: 'Permite modificar regras de aprovação.', + namedrule_delete_any: 'Excluir Regras de Aprovação', + namedrule_delete_any_description: 'Permite excluir regras de aprovação.', }, }, request_policies: { diff --git a/apps/wallet/src/pages/ApprovalRulesPage.vue b/apps/wallet/src/pages/ApprovalRulesPage.vue index 517962c8e..2d845c799 100644 --- a/apps/wallet/src/pages/ApprovalRulesPage.vue +++ b/apps/wallet/src/pages/ApprovalRulesPage.vue @@ -42,7 +42,7 @@ hide-not-found /> - + @@ -60,7 +60,8 @@ import ApprovalRulesTab from '~/components/policies/ApprovalRulesTab.vue'; import { Routes } from '~/configs/routes.config'; import { RequestDomains } from '~/types/station.types'; import RecentRequests from '~/components/requests/RecentRequests.vue'; -import { ref } from 'vue'; +import { type Component, ref } from 'vue'; +import { hasRequiredPrivilege } from '~/utils/auth.utils'; const props = withDefaults(defineProps(), { title: undefined, breadcrumbs: () => [] }); @@ -68,10 +69,15 @@ enum Tabs { RequestPolicies = 'request_policies', ApprovalRules = 'approval_rules', } -const tabs = [ - { name: Tabs.ApprovalRules, component: ApprovalRulesTab }, - { name: Tabs.RequestPolicies, component: RequestPoliciesTab }, -]; +const tabs: { name: Tabs; component: Component }[] = []; -const tab = ref(Tabs.ApprovalRules); +if (hasRequiredPrivilege({ anyOf: [Privilege.ListNamedRules] })) { + tabs.push({ name: Tabs.ApprovalRules, component: ApprovalRulesTab }); +} + +if (hasRequiredPrivilege({ anyOf: [Privilege.ListRequestPolicies] })) { + tabs.push({ name: Tabs.RequestPolicies, component: RequestPoliciesTab }); +} + +const tab = ref(tabs[0]?.name); diff --git a/scripts/utils.sh b/scripts/utils.sh index c855eb712..e4b8a4905 100755 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -101,7 +101,7 @@ function install_icx_asset() { if ! command -v icx-asset >/dev/null 2>&1; then echo "icx-asset not found, installing..." - cargo install icx-asset --version 0.21.0 + cargo install --locked icx-asset --version 0.21.0 echo "icx-asset installed successfully."