From b6fa251bcd267940d368a02636ecd7c0931bda9e Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Sun, 19 May 2024 18:55:28 +0100 Subject: [PATCH] chore: cleaner way to implement redirect if role permission denied --- .../components/RoleBasedSecurity/index.svelte | 5 ++++ apps/dashboard/src/lib/utils/redirect.ts | 11 -------- .../src/routes/courses/[id]/+page.svelte | 25 +++++++++++++---- .../routes/courses/[id]/marks/+page.svelte | 28 +++++++++++++++---- .../courses/[id]/submissions/+page.svelte | 8 +++--- 5 files changed, 51 insertions(+), 26 deletions(-) delete mode 100644 apps/dashboard/src/lib/utils/redirect.ts diff --git a/apps/dashboard/src/lib/components/RoleBasedSecurity/index.svelte b/apps/dashboard/src/lib/components/RoleBasedSecurity/index.svelte index ef7c63a5..3d2c5dda 100644 --- a/apps/dashboard/src/lib/components/RoleBasedSecurity/index.svelte +++ b/apps/dashboard/src/lib/components/RoleBasedSecurity/index.svelte @@ -4,6 +4,7 @@ import type { GroupPerson } from '$lib/utils/types'; export let allowedRoles: number[] = []; + export let onDenied = () => {}; let userRole: number = 0; @@ -11,6 +12,10 @@ const user: GroupPerson = $group.people.find((person) => person.profile_id === $profile.id)!; userRole = user ? user.role_id : userRole; + + if ($group.people.length && !allowedRoles.includes(userRole)) { + onDenied(); + } } diff --git a/apps/dashboard/src/lib/utils/redirect.ts b/apps/dashboard/src/lib/utils/redirect.ts deleted file mode 100644 index fa591043..00000000 --- a/apps/dashboard/src/lib/utils/redirect.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { goto } from '$app/navigation'; -import { globalStore } from '$lib/utils/store/app'; -import { get } from 'svelte/store'; - -export function redirectToLesson(settings, courseId) { - const globalStoreVal = get(globalStore); - - if (!settings && globalStoreVal.isOrgSite) { - goto(`${courseId}/lessons?next=true`); - } -} diff --git a/apps/dashboard/src/routes/courses/[id]/+page.svelte b/apps/dashboard/src/routes/courses/[id]/+page.svelte index abff5573..6439f0b9 100644 --- a/apps/dashboard/src/routes/courses/[id]/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/+page.svelte @@ -30,9 +30,10 @@ triggerSendEmail } from '$lib/utils/services/notification/notification'; import NewsFeedLoader from '$lib/components/Course/components/NewsFeed/NewsFeedLoader.svelte'; - import { t } from '$lib/utils/functions/translations.js'; - import { currentOrg } from '$lib/utils/store/org.js'; - import { redirectToLesson } from '$lib/utils/redirect.js'; + import { t } from '$lib/utils/functions/translations'; + import { currentOrg } from '$lib/utils/store/org'; + import type { CurrentOrg } from '$lib/utils/types/org'; + import { goto } from '$app/navigation'; export let data; @@ -223,7 +224,16 @@ }; } - $: redirectToLesson($currentOrg?.customization?.course?.newsfeed, data.courseId); + function getPageRoles(org: CurrentOrg) { + const roles = [1, 2]; + + if (org.customization.course.newsfeed) { + roles.push(3); + } + + return roles; + } + $: initNewsFeed(data.courseId); $: setAuthor($group, $profile.id); @@ -232,7 +242,12 @@ - + { + goto(`/courses/${data.courseId}/lessons?next=true`); + }} + > diff --git a/apps/dashboard/src/routes/courses/[id]/marks/+page.svelte b/apps/dashboard/src/routes/courses/[id]/marks/+page.svelte index a9311b9c..0077ef6c 100644 --- a/apps/dashboard/src/routes/courses/[id]/marks/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/marks/+page.svelte @@ -1,4 +1,5 @@ - + { + goto(`/courses/${data.courseId}/lessons?next=true`); + }} + > diff --git a/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte b/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte index a337930d..9d937e39 100644 --- a/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte @@ -347,8 +347,8 @@ bind:isGradeWithAI /> - - + + @@ -424,8 +424,8 @@ {/each} - - + +