Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/components/card/application.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const { data } = await useApi<FullResponse<ApplicationSubmissionData[]>>(
</script>

<template>
<UCard v-if="hasPermissionTo('applicationSubmission.read')" variant="subtle">
<UCard variant="subtle">
<template #header>
Pending Applications
<UBadge variant="subtle">{{ data?.data?.length }}</UBadge>
Expand Down
2 changes: 1 addition & 1 deletion app/components/card/bot-token.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const copyBotToken = () => {
</script>

<template>
<UCard v-if="hasPermissionTo('owner')" variant="subtle">
<UCard variant="subtle">
<template #header>
<p>Bot token</p>
</template>
Expand Down
2 changes: 1 addition & 1 deletion app/components/card/ticket.vue
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const { data } = await useApi<FullResponse<TicketData[]>>("/ticket", {
</script>

<template>
<UCard v-if="hasPermissionTo('ticket.read')" variant="subtle">
<UCard variant="subtle">
<template #header>
Open Tickets
<UBadge variant="subtle">{{ data?.data?.length }}</UBadge>
Expand Down
2 changes: 1 addition & 1 deletion app/components/ticket/action-cell.vue
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const closeTicket = async () => {
<template>
<div class="space-x-2">
<UButton
v-if="hasPermissionTo('ticketTranscript.read')"
v-if="hasPermissionTo(['ticketTranscript.read', 'ticketTranscript.read-own'])"
label="Transcript"
size="md"
icon="material-symbols:drive-file-rename-outline-outline"
Expand Down
8 changes: 4 additions & 4 deletions app/layouts/default.vue
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ const items: NavigationMenuItem[] = [
label: "Tickets",
icon: "famicons:ticket-outline",
to: "/ticket",
permission: "ticket.read",
permission: ["ticket.read", "ticket.read-own"],
children: [
{
label: "Current tickets",
to: "/ticket",
permission: "ticket.read",
permission: ["ticket.read", "ticket.read-own"],
},
{
label: "Config",
Expand Down Expand Up @@ -98,13 +98,13 @@ const filteredItems = items
return navigation;
}
navigation.children = navigation.children.filter((child) =>
hasPermissionTo(child.permission),
child.permission ? hasPermissionTo(child.permission) : true,
);
return navigation;
})
.filter(
(navigation) =>
hasPermissionTo(navigation.permission) || navigation.children?.length,
(navigation.permission ? hasPermissionTo(navigation.permission) : true) || navigation.children?.length,
);

const footerItems: NavigationMenuItem[] = [
Expand Down
8 changes: 4 additions & 4 deletions app/pages/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ useHead({

<template #body>
<p class="text-2xl">Hello {{ user?.nickname }}</p>
<div class="columns-1 md:columns-2 gap-4">
<CardApplication class="mb-4" />
<CardTicket class="mb-4" />
<CardBotToken class="mb-4" />
<div class="columns-1 md:columns-2 gap-4 space-y-4">
<CardApplication v-if="hasPermissionTo('applicationSubmission.read')" />
<CardTicket v-if="hasPermissionTo(['ticket.read', 'ticket.read-own'])" />
<CardBotToken v-if="hasPermissionTo('owner')" />
</div>
</template>
</UDashboardPanel>
Expand Down
2 changes: 1 addition & 1 deletion app/pages/ticket/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ watch(page, loadTickets);

definePageMeta({
permission: {
permission: "ticket.read",
permission: ["ticket.read", "ticket.read-own"],
},
});

Expand Down
3 changes: 2 additions & 1 deletion app/pages/ticket/transcript/[ticket_id].vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

const route = useRoute();
const ticket = ref<TicketData>();
const user = useCurrentUser();

Check failure on line 8 in app/pages/ticket/transcript/[ticket_id].vue

View workflow job for this annotation

GitHub Actions / validate

'user' is assigned a value but never used. Allowed unused vars must match /^_/u

const { data } = await useApi<PaginatedResponse<TicketData[]>>("/ticket", {
method: "get",
Expand All @@ -18,7 +19,7 @@

definePageMeta({
permission: {
permission: "ticketTranscript.read",
permission: ["ticketTranscript.read", "ticketTranscript.read-own"],
},
});

Expand Down
15 changes: 13 additions & 2 deletions app/utils/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,23 @@ export const parseRouteParameter = (
return Number.isNaN(value) ? 0 : value;
};

export const hasPermissionTo = (permission: string): boolean => {
export const hasPermissionTo = (
permission: string | string[]
): boolean => {
const user = useCurrentUser().value;
if (!user) {
return false;
}
return user.permissions.includes(permission) || user.is_owner;

if (user.is_owner) {
return true;
}

const permissions = Array.isArray(permission)
? permission
: [permission];

return permissions.some(p => user.permissions.includes(p));
};

// replace with enum from api
Expand Down
Loading