diff --git a/client/src/components/dashboard/CoursePanel.vue b/client/src/components/dashboard/CoursePanel.vue
index 89a3a335..a02fca17 100644
--- a/client/src/components/dashboard/CoursePanel.vue
+++ b/client/src/components/dashboard/CoursePanel.vue
@@ -65,20 +65,6 @@ const actionButtonProps = computed<{ href: string; text: string; cyKey: string }
cyKey: "lm-dashboard-link",
};
}
- if (props.courseConfig?.role_key === "Berufsbildner") {
- return {
- href: getLearningPathUrl(props.courseConfig?.course_slug),
- text: "a.Vorschau Teilnehmer",
- cyKey: "progress-dashboard-continue-course-link",
- };
- }
- if (props.courseConfig?.role_key === "Ausbildungsverantwortlicher") {
- return {
- href: getLearningPathUrl(props.courseConfig?.course_slug),
- text: "a.Vorschau Teilnehmer",
- cyKey: "tr-dashboard-link",
- };
- }
return {
href: getLearningPathUrl(props.courseConfig?.course_slug),
text: "Weiter lernen",
@@ -88,7 +74,11 @@ const actionButtonProps = computed<{ href: string; text: string; cyKey: string }
);
function hasActionButton(): boolean {
- return props.courseConfig?.role_key !== "MentorUK";
+ return (
+ props.courseConfig?.role_key !== "MentorUK" &&
+ props.courseConfig?.role_key !== "Ausbildungsverantwortlicher" &&
+ props.courseConfig?.role_key !== "Berufsbildner"
+ );
}
diff --git a/client/src/components/header/AccountMenuContent.vue b/client/src/components/header/AccountMenuContent.vue
index a8cda83f..7f38ea98 100644
--- a/client/src/components/header/AccountMenuContent.vue
+++ b/client/src/components/header/AccountMenuContent.vue
@@ -2,6 +2,8 @@
import CourseSessionsMenu from "@/components/header/CourseSessionsMenu.vue";
import type { User } from "@/stores/user";
import type { CourseSession } from "@/types";
+import { useRouteLookups } from "@/utils/route";
+import { computed } from "vue";
import { useRouter } from "vue-router";
const props = defineProps<{
@@ -13,6 +15,9 @@ const props = defineProps<{
const emit = defineEmits(["selectCourseSession", "logout", "close"]);
const router = useRouter();
+const { inCourse } = useRouteLookups();
+
+const showCourseSessionMenu = computed(() => inCourse() && props.courseSessions.length);
async function navigate(routeName: string) {
await router.push({ name: routeName });
@@ -41,7 +46,7 @@ async function navigate(routeName: string) {
-
+
)
);
-const hasCockpitMenu = computed(() =>
- Boolean(courseSessionsStore.currentCourseSession?.actions.includes("expert-cockpit"))
+const hasCockpitMenu = computed(
+ () =>
+ Boolean(
+ courseSessionsStore.currentCourseSession?.actions.includes("expert-cockpit")
+ ) && inCourse()
);
-const hasPreviewMenu = computed(() =>
- Boolean(courseSessionsStore.currentCourseSession?.actions.includes("preview"))
+const hasPreviewMenu = computed(
+ () =>
+ Boolean(courseSessionsStore.currentCourseSession?.actions.includes("preview")) &&
+ inCourse()
);
const hasAppointmentsMenu = computed(() =>
diff --git a/client/src/stores/user.ts b/client/src/stores/user.ts
index 5280d4c5..1f41d130 100644
--- a/client/src/stores/user.ts
+++ b/client/src/stores/user.ts
@@ -10,7 +10,7 @@ let logoutRedirectUrl = import.meta.env.VITE_LOGOUT_REDIRECT || "/";
if (import.meta.env.VITE_OAUTH_API_BASE_URL) {
logoutRedirectUrl = `${
import.meta.env.VITE_OAUTH_API_BASE_URL
- }logout/?post_logout_redirect_uri=${window.location.origin}`;
+ }logout/?post_logout_redirect_uri=${window.location.origin}&client_id=iterativ`;
}
const AVAILABLE_LANGUAGES = ["de", "fr", "it"];
diff --git a/server/vbv_lernwelt/dashboard/views.py b/server/vbv_lernwelt/dashboard/views.py
index db5d5b80..5f769722 100644
--- a/server/vbv_lernwelt/dashboard/views.py
+++ b/server/vbv_lernwelt/dashboard/views.py
@@ -259,8 +259,15 @@ def collect_course_sessions_by_course(
def has_preview(role_key: RoleKeyType) -> bool:
+ print("has_preview", role_key)
return (
- role_key in [RoleKeyType.MENTOR_VV, RoleKeyType.MENTOR_UK]
+ role_key
+ in [
+ RoleKeyType.MENTOR_VV,
+ RoleKeyType.MENTOR_UK,
+ RoleKeyType.BERUFSBILDNER,
+ RoleKeyType.TRAINING_RESPONSIBLE,
+ ]
and not role_key == RoleKeyType.MEMBER
)
diff --git a/server/vbv_lernwelt/iam/permissions.py b/server/vbv_lernwelt/iam/permissions.py
index f52c60d9..23a7cc2a 100644
--- a/server/vbv_lernwelt/iam/permissions.py
+++ b/server/vbv_lernwelt/iam/permissions.py
@@ -51,9 +51,11 @@ def has_course_session_preview(user, course_session_id: int):
if is_course_session_member(user, course_session_id):
return False
- return is_course_session_learning_mentor(
- user, course_session_id
- ) or is_course_session_expert(user, course_session_id)
+ return (
+ is_course_session_learning_mentor(user, course_session_id)
+ or is_course_session_berufsbildner(user, course_session_id)
+ or is_course_session_expert(user, course_session_id)
+ )
def has_media_library(user, course_session_id: int):
diff --git a/server/vbv_lernwelt/sso/admin.py b/server/vbv_lernwelt/sso/admin.py
index 01d57e66..1db24124 100644
--- a/server/vbv_lernwelt/sso/admin.py
+++ b/server/vbv_lernwelt/sso/admin.py
@@ -40,12 +40,12 @@ def sync_sso_roles_from_admin(user: User, request):
for csu in CourseSessionUser.objects.filter(user=user)
}
- course_roles += {
+ course_roles.update(
(relation.participant.course_session.course.slug, "LEARNING_MENTOR")
for relation in AgentParticipantRelation.objects.filter(
agent=user, role=AgentParticipantRoleType.LEARNING_MENTOR.value
)
- }
+ )
for csg in CourseSessionGroup.objects.filter(supervisor=user):
for course_session in csg.course_session.all():