diff --git a/apps/blueprints/src/components/blueprint/Blueprint.tsx b/apps/blueprints/src/components/blueprint/Blueprint.tsx index a61cebc..8435594 100644 --- a/apps/blueprints/src/components/blueprint/Blueprint.tsx +++ b/apps/blueprints/src/components/blueprint/Blueprint.tsx @@ -196,6 +196,19 @@ export const BlueprintSubPage: React.FC = ({ > {string && data && } + + {(auth?.role === "admin" || auth?.role === "moderator") && ( + + + + + + + + )} ); }; diff --git a/apps/blueprints/src/components/blueprint/BlueprintBook.tsx b/apps/blueprints/src/components/blueprint/BlueprintBook.tsx index d3e7f29..b049692 100644 --- a/apps/blueprints/src/components/blueprint/BlueprintBook.tsx +++ b/apps/blueprints/src/components/blueprint/BlueprintBook.tsx @@ -287,6 +287,19 @@ export const BlueprintBookSubPage: React.FC = ({ /> )} + + {(auth?.role === "admin" || auth?.role === "moderator") && ( + + + + + + + + )} ); }; diff --git a/apps/blueprints/src/pages/api/blueprint/edit.ts b/apps/blueprints/src/pages/api/blueprint/edit.ts index 81d037f..260de5f 100644 --- a/apps/blueprints/src/pages/api/blueprint/edit.ts +++ b/apps/blueprints/src/pages/api/blueprint/edit.ts @@ -21,7 +21,9 @@ const handler = apiHandler(async (req, res, { session }) => { if (!existing) { return res.status(404).json({ status: "Blueprint not found" }); } - if (existing?.user_id !== session.user_id) { + + const isModerator = session.user.role === "admin" || session.user.role === "moderator"; + if (existing?.user_id !== session.user_id && !isModerator) { return res.status(403).json({ status: "Unauthorised" }); } diff --git a/apps/blueprints/src/pages/api/user.ts b/apps/blueprints/src/pages/api/user.ts index 7226075..042b93e 100644 --- a/apps/blueprints/src/pages/api/user.ts +++ b/apps/blueprints/src/pages/api/user.ts @@ -9,6 +9,7 @@ const handler = apiHandler(async (_, res, { session }) => { username: session.user.username, email: session.user.email, steam_id: session.user.steam_id, + role: session.user.role } as AuthContextProps, }); } diff --git a/apps/blueprints/src/pages/user/blueprint/[blueprintId].tsx b/apps/blueprints/src/pages/user/blueprint/[blueprintId].tsx index aeec705..8db40e7 100644 --- a/apps/blueprints/src/pages/user/blueprint/[blueprintId].tsx +++ b/apps/blueprints/src/pages/user/blueprint/[blueprintId].tsx @@ -238,7 +238,9 @@ export const getServerSideProps = pageHandler(async (context, { session, redirec let selected!: UserBlueprintProps["selected"]; - if (blueprintPage.user_id !== session.user_id) { + const isModerator = session.user.role === "admin" || session.user.role === "moderator"; + + if (blueprintPage.user_id !== session.user_id && !isModerator) { return redirect("/"); } diff --git a/apps/blueprints/src/providers/auth.tsx b/apps/blueprints/src/providers/auth.tsx index 39c7530..13b0d3a 100644 --- a/apps/blueprints/src/providers/auth.tsx +++ b/apps/blueprints/src/providers/auth.tsx @@ -5,6 +5,7 @@ export type AuthContextProps = { username: string; email?: string; steam_id?: string; + role: "user" | "moderator" | "admin"; } | null; export const AuthContext = React.createContext(null); diff --git a/apps/blueprints/src/utils/validate.ts b/apps/blueprints/src/utils/validate.ts index fbe7126..cb81f7a 100644 --- a/apps/blueprints/src/utils/validate.ts +++ b/apps/blueprints/src/utils/validate.ts @@ -93,7 +93,7 @@ export const joinValidations = (...validations: Array<(value: T) => string | export const validateBlueprintString = (value: string) => { if (value) { const parsed = parseBlueprintStringClient(value); - console.log({ parsed }); + // console.log({ parsed }); if (!parsed) { return "Not recognised as a blueprint string";