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') }}
- {{ $t('profile.manage-data-description') }}
-
-
-
+
+
+
+ {{ $t('profile.manage-data') }}
+ {{ $t('profile.manage-data-description') }}
+
+