diff --git a/frontend/middleware/admin-only.ts b/frontend/middleware/admin-only.ts index 66a4e00f3566..b55f603d5151 100644 --- a/frontend/middleware/admin-only.ts +++ b/frontend/middleware/admin-only.ts @@ -1,8 +1,8 @@ -interface AuthRedirectParams { +interface AdminRedirectParams { $auth: any redirect: (path: string) => void } -export default function ({ $auth, redirect }: AuthRedirectParams) { +export default function ({ $auth, redirect }: AdminRedirectParams) { // If the user is not an admin redirect to the home page if (!$auth.user.admin) { return redirect("/") diff --git a/frontend/middleware/can-organize-only.ts b/frontend/middleware/can-organize-only.ts new file mode 100644 index 000000000000..9bb6b6603d75 --- /dev/null +++ b/frontend/middleware/can-organize-only.ts @@ -0,0 +1,12 @@ +interface CanOrganizeRedirectParams { + $auth: any + redirect: (path: string) => void +} +export default function ({ $auth, redirect }: CanOrganizeRedirectParams) { + console.log($auth.user); + // If the user is not allowed to organize redirect to the home page + if (!$auth.user.canOrganize) { + console.warn("User is not allowed to organize data"); + return redirect("/") + } +} diff --git a/frontend/pages/group/data/categories.vue b/frontend/pages/group/data/categories.vue index 290e4f79e083..038c716c0e43 100644 --- a/frontend/pages/group/data/categories.vue +++ b/frontend/pages/group/data/categories.vue @@ -73,6 +73,7 @@ import { useCategoryStore, useCategoryData } from "~/composables/store"; import { RecipeCategory } from "~/lib/api/types/admin"; export default defineComponent({ + middleware: ["auth", "can-organize-only"], setup() { const { i18n } = useContext(); const tableConfig = { diff --git a/frontend/pages/group/data/foods.vue b/frontend/pages/group/data/foods.vue index 32eda4322b7d..aca6f2074fb5 100644 --- a/frontend/pages/group/data/foods.vue +++ b/frontend/pages/group/data/foods.vue @@ -201,8 +201,8 @@ import { useFoodStore, useLabelStore } from "~/composables/store"; import { VForm } from "~/types/vuetify"; export default defineComponent({ - components: { MultiPurposeLabel, RecipeDataAliasManagerDialog }, + middleware: ["auth", "can-organize-only"], setup() { const userApi = useUserApi(); const { i18n } = useContext(); diff --git a/frontend/pages/group/data/labels.vue b/frontend/pages/group/data/labels.vue index 604135b05873..7d1e45ea85d0 100644 --- a/frontend/pages/group/data/labels.vue +++ b/frontend/pages/group/data/labels.vue @@ -122,6 +122,7 @@ import { useLabelData, useLabelStore } from "~/composables/store"; export default defineComponent({ components: { MultiPurposeLabel }, + middleware: ["auth", "can-organize-only"], setup() { const userApi = useUserApi(); const { i18n } = useContext(); diff --git a/frontend/pages/group/data/recipes.vue b/frontend/pages/group/data/recipes.vue index 0803f285badc..2cd55aad4ea9 100644 --- a/frontend/pages/group/data/recipes.vue +++ b/frontend/pages/group/data/recipes.vue @@ -176,6 +176,7 @@ enum MODES { export default defineComponent({ components: { RecipeDataTable, RecipeOrganizerSelector, GroupExportData, RecipeSettingsSwitches }, + middleware: ["auth", "can-organize-only"], scrollToTop: true, setup() { const { getAllRecipes, refreshRecipes } = useRecipes(true, true); diff --git a/frontend/pages/group/data/tags.vue b/frontend/pages/group/data/tags.vue index 076a23f08b4d..b2440b4e5c0c 100644 --- a/frontend/pages/group/data/tags.vue +++ b/frontend/pages/group/data/tags.vue @@ -73,6 +73,7 @@ import { useTagStore, useTagData } from "~/composables/store"; import { RecipeTag } from "~/lib/api/types/admin"; export default defineComponent({ + middleware: ["auth", "can-organize-only"], setup() { const { i18n } = useContext(); const tableConfig = { diff --git a/frontend/pages/group/data/tools.vue b/frontend/pages/group/data/tools.vue index 4ff3c547819b..49825faf2da1 100644 --- a/frontend/pages/group/data/tools.vue +++ b/frontend/pages/group/data/tools.vue @@ -80,6 +80,7 @@ import { useToolStore, useToolData } from "~/composables/store"; import { RecipeTool } from "~/lib/api/types/admin"; export default defineComponent({ + middleware: ["auth", "can-organize-only"], setup() { const { i18n } = useContext(); const tableConfig = { diff --git a/frontend/pages/group/data/units.vue b/frontend/pages/group/data/units.vue index 9ce5fa991110..f1d42ba464f1 100644 --- a/frontend/pages/group/data/units.vue +++ b/frontend/pages/group/data/units.vue @@ -218,6 +218,7 @@ import { VForm } from "~/types/vuetify"; export default defineComponent({ components: { RecipeDataAliasManagerDialog }, + middleware: ["auth", "can-organize-only"], setup() { const userApi = useUserApi(); const { i18n } = useContext(); diff --git a/frontend/pages/user/profile/index.vue b/frontend/pages/user/profile/index.vue index ddb011550d1a..54a1e1b48708 100644 --- a/frontend/pages/user/profile/index.vue +++ b/frontend/pages/user/profile/index.vue @@ -162,17 +162,16 @@ - - - - - {{ $t('profile.manage-data-description') }} - - - + + + + + {{ $t('profile.manage-data-description') }} + +