From 19e776a772d07d4aa96386c1ab2c4467070672d0 Mon Sep 17 00:00:00 2001
From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
Date: Wed, 31 Jan 2024 10:33:05 +0000
Subject: [PATCH 01/15] manage-data pages
---
frontend/middleware/admin-only.ts | 4 ++--
frontend/middleware/can-organize-only.ts | 12 ++++++++++++
frontend/pages/group/data/categories.vue | 1 +
frontend/pages/group/data/foods.vue | 2 +-
frontend/pages/group/data/labels.vue | 1 +
frontend/pages/group/data/recipes.vue | 1 +
frontend/pages/group/data/tags.vue | 1 +
frontend/pages/group/data/tools.vue | 1 +
frontend/pages/group/data/units.vue | 1 +
frontend/pages/user/profile/index.vue | 22 +++++++++++-----------
10 files changed, 32 insertions(+), 14 deletions(-)
create mode 100644 frontend/middleware/can-organize-only.ts
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') }}
+
+
Date: Wed, 31 Jan 2024 11:56:15 +0000
Subject: [PATCH 02/15] add avanced-only
---
frontend/middleware/advanced-only.ts | 11 +++++++++++
frontend/middleware/can-organize-only.ts | 1 -
2 files changed, 11 insertions(+), 1 deletion(-)
create mode 100644 frontend/middleware/advanced-only.ts
diff --git a/frontend/middleware/advanced-only.ts b/frontend/middleware/advanced-only.ts
new file mode 100644
index 000000000000..e9d69a2fd852
--- /dev/null
+++ b/frontend/middleware/advanced-only.ts
@@ -0,0 +1,11 @@
+interface AdvancedOnlyRedirectParams {
+ $auth: any
+ redirect: (path: string) => void
+}
+export default function ({ $auth, redirect }: AdvancedOnlyRedirectParams) {
+ // If the user is not allowed to organize redirect to the home page
+ if (!$auth.user.advanced) {
+ console.warn("User is not allowed to access advanced features");
+ return redirect("/")
+ }
+}
diff --git a/frontend/middleware/can-organize-only.ts b/frontend/middleware/can-organize-only.ts
index 9bb6b6603d75..93d6c5c5aabf 100644
--- a/frontend/middleware/can-organize-only.ts
+++ b/frontend/middleware/can-organize-only.ts
@@ -3,7 +3,6 @@ interface CanOrganizeRedirectParams {
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");
From 7dafa6c7fe2e0d446de4de77b7924b74352ee817 Mon Sep 17 00:00:00 2001
From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
Date: Wed, 31 Jan 2024 15:25:21 +0000
Subject: [PATCH 03/15] add access controll to user pages
---
frontend/pages/user/_id/favorites.vue | 1 +
frontend/pages/user/profile/api-tokens.vue | 1 +
frontend/pages/user/profile/edit.vue | 1 +
frontend/pages/user/profile/index.vue | 2 +-
4 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/frontend/pages/user/_id/favorites.vue b/frontend/pages/user/_id/favorites.vue
index ec4e5c8fd984..603428d428e7 100644
--- a/frontend/pages/user/_id/favorites.vue
+++ b/frontend/pages/user/_id/favorites.vue
@@ -14,6 +14,7 @@ import { useAsyncKey } from "~/composables/use-utils";
export default defineComponent({
components: { RecipeCardSection },
+ middleware: "auth",
setup() {
const api = useUserApi();
const route = useRoute();
diff --git a/frontend/pages/user/profile/api-tokens.vue b/frontend/pages/user/profile/api-tokens.vue
index 8e41c6216986..8b6d21b361b9 100644
--- a/frontend/pages/user/profile/api-tokens.vue
+++ b/frontend/pages/user/profile/api-tokens.vue
@@ -69,6 +69,7 @@ import { useUserApi } from "~/composables/api";
import { VForm } from "~/types/vuetify";
export default defineComponent({
+ middleware: ["auth", "advanced-only"],
setup() {
const nuxtContext = useContext();
diff --git a/frontend/pages/user/profile/edit.vue b/frontend/pages/user/profile/edit.vue
index 3eadc87ed1c9..2681e9c5df68 100644
--- a/frontend/pages/user/profile/edit.vue
+++ b/frontend/pages/user/profile/edit.vue
@@ -135,6 +135,7 @@ export default defineComponent({
UserAvatar,
UserPasswordStrength,
},
+ middleware: "auth",
setup() {
const { $auth } = useContext();
const user = computed(() => $auth.user as unknown as UserOut);
diff --git a/frontend/pages/user/profile/index.vue b/frontend/pages/user/profile/index.vue
index 54a1e1b48708..37041726747e 100644
--- a/frontend/pages/user/profile/index.vue
+++ b/frontend/pages/user/profile/index.vue
@@ -207,7 +207,7 @@ export default defineComponent({
UserAvatar,
StatsCards,
},
- middleware: ["auth"],
+ middleware: "auth",
scrollToTop: true,
setup() {
const { $auth, i18n } = useContext();
From 890b5d93a70b3072f0f26e177f06346b4816f0d6 Mon Sep 17 00:00:00 2001
From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
Date: Thu, 1 Feb 2024 07:50:09 +0000
Subject: [PATCH 04/15] access controll coobook index page
---
frontend/pages/g/_groupSlug/cookbooks/index.vue | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/frontend/pages/g/_groupSlug/cookbooks/index.vue b/frontend/pages/g/_groupSlug/cookbooks/index.vue
index db99713c3bcb..35ad12fa8111 100644
--- a/frontend/pages/g/_groupSlug/cookbooks/index.vue
+++ b/frontend/pages/g/_groupSlug/cookbooks/index.vue
@@ -90,24 +90,17 @@