diff --git a/resources/js/Components/Billing/BillingBanner.vue b/resources/js/Components/Billing/BillingBanner.vue
index bbaf3440..9f45eee3 100644
--- a/resources/js/Components/Billing/BillingBanner.vue
+++ b/resources/js/Components/Billing/BillingBanner.vue
@@ -7,9 +7,15 @@ import {
} from '@heroicons/vue/16/solid';
import { Link } from '@inertiajs/vue3';
import { computed } from 'vue';
-import { isBlocked, isFreePlan, isInTrial } from '@/utils/billing';
+import {
+ isBillingActivated,
+ isBlocked,
+ isFreePlan,
+ isInTrial,
+} from '@/utils/billing';
import { useSessionStorage } from '@vueuse/core';
import { getCurrentOrganizationId } from '@/utils/useUser';
+import { canManageBilling } from '@/utils/permissions';
const hideTrialBanner = useSessionStorage(
'showTrialBanner-' + getCurrentOrganizationId(),
@@ -46,13 +52,13 @@ const showFreeUpgradeBanner = computed(
-
+
Upgrade now
-
-
+
Upgrade now
-
+
@@ -102,13 +110,15 @@ const showFreeUpgradeBanner = computed(
>
-
+
Upgrade now
-
+
diff --git a/resources/js/Components/Common/Member/MemberInviteModal.vue b/resources/js/Components/Common/Member/MemberInviteModal.vue
index 5e6f01eb..b44c865c 100644
--- a/resources/js/Components/Common/Member/MemberInviteModal.vue
+++ b/resources/js/Components/Common/Member/MemberInviteModal.vue
@@ -17,7 +17,7 @@ import {
isInTrial,
} from '@/utils/billing';
import { CreditCardIcon, UserGroupIcon } from '@heroicons/vue/20/solid';
-import { canUpdateOrganization } from '@/utils/permissions';
+import { canManageBilling, canUpdateOrganization } from '@/utils/permissions';
import { api } from '@/packages/api/src';
import type { MemberRole } from '@/packages/api/src';
import { z } from 'zod';
@@ -117,7 +117,9 @@ const inviteMembersIsAllowed = computed(() => {
please upgrade to a paid plan.
-
+
-
-
+
+
Go to Billing
@@ -63,7 +62,7 @@ import { storeToRefs } from 'pinia';
import { useNotificationsStore } from '@/utils/notification';
import DialogModal from '@/packages/ui/src/DialogModal.vue';
import { isBillingActivated } from '@/utils/billing';
-import { canUpdateOrganization } from '@/utils/permissions';
+import { canManageBilling } from '@/utils/permissions';
import { CreditCardIcon, XCircleIcon } from '@heroicons/vue/20/solid';
import { Link } from '@inertiajs/vue3';
import PrimaryButton from '../packages/ui/src/Buttons/PrimaryButton.vue';
diff --git a/resources/js/Components/OrganizationSwitcher.vue b/resources/js/Components/OrganizationSwitcher.vue
index 54fad655..44c59520 100644
--- a/resources/js/Components/OrganizationSwitcher.vue
+++ b/resources/js/Components/OrganizationSwitcher.vue
@@ -5,7 +5,7 @@ import DropdownLink from '@/Components/DropdownLink.vue';
import { usePage } from '@inertiajs/vue3';
import type { Organization, User } from '@/types/models';
import { isBillingActivated } from '@/utils/billing';
-import { canUpdateOrganization } from '@/utils/permissions';
+import { canManageBilling } from '@/utils/permissions';
import { switchOrganization } from '@/utils/useOrganization';
const page = usePage<{
@@ -79,7 +79,7 @@ const switchToTeam = (organization: Organization) => {
Billing
diff --git a/resources/js/Layouts/AppLayout.vue b/resources/js/Layouts/AppLayout.vue
index af5e7500..5ef8775f 100644
--- a/resources/js/Layouts/AppLayout.vue
+++ b/resources/js/Layouts/AppLayout.vue
@@ -23,6 +23,7 @@ import { onMounted, ref } from 'vue';
import NotificationContainer from '@/Components/NotificationContainer.vue';
import { initializeStores, refreshStores } from '@/utils/init';
import {
+ canManageBilling,
canUpdateOrganization,
canViewClients,
canViewMembers,
@@ -160,9 +161,7 @@ const page = usePage<{
-
-
+
+
Go to Billing
diff --git a/resources/js/utils/permissions.ts b/resources/js/utils/permissions.ts
index 2d81eff6..dbdcdb70 100644
--- a/resources/js/utils/permissions.ts
+++ b/resources/js/utils/permissions.ts
@@ -96,3 +96,7 @@ export function canCreateTags() {
export function canDeleteTags() {
return currentUserHasPermission('tags:delete');
}
+
+export function canManageBilling() {
+ return currentUserHasPermission('billing');
+}