Add roles to course_session_permissions

This commit is contained in:
Daniel Egger 2024-04-03 06:48:24 +02:00
parent 24aa5d9b8c
commit 16ebd23edf
1 changed files with 42 additions and 56 deletions

View File

@ -48,9 +48,9 @@ def has_course_session_preview(user, course_session_id: int):
if is_course_session_member(user, course_session_id):
return False
return is_learning_mentor(user, course_session_id) or is_course_session_expert(
return is_course_session_learning_mentor(
user, course_session_id
)
) or is_course_session_expert(user, course_session_id)
def has_media_library(user, course_session_id: int):
@ -66,7 +66,7 @@ def has_media_library(user, course_session_id: int):
).exists()
def is_learning_mentor(mentor: User, course_session_id: int):
def is_course_session_learning_mentor(mentor: User, course_session_id: int):
course_session = CourseSession.objects.get(id=course_session_id)
if course_session is None:
@ -92,6 +92,15 @@ def is_learning_mentor_for_user(
).exists()
def is_course_session_supervisor(user, course_session_id: int):
if user.is_superuser:
return True
return CourseSessionGroup.objects.filter(
supervisor=user, course_session=course_session_id
).exists()
def is_course_session_expert(user, course_session_id: int):
if user.is_superuser:
return True
@ -244,40 +253,6 @@ def has_appointments(user: User, course_session_id: int) -> bool:
return CourseSessionUser.objects.filter(course_session=course_session_id).exists()
def has_learning_mentor(user: User, course_session_id: int) -> bool:
course_session = CourseSession.objects.get(id=course_session_id)
if course_session is None:
return False
if not course_session.course.configuration.enable_learning_mentor:
return False
if is_learning_mentor(user, course_session_id):
return True
if is_course_session_member(user, course_session_id):
return True
return False
def can_edit_mentors(user: User, course_session_id: int) -> bool:
if not has_learning_mentor(user, course_session_id):
return False
# limit further, since has_learning_mentor is too broad
return is_course_session_member(user, course_session_id)
def can_guide_members(user: User, course_session_id: int) -> bool:
if not has_learning_mentor(user, course_session_id):
return False
# limit further, since has_learning_mentor is too broad
return is_learning_mentor(user, course_session_id)
def can_view_profile(user: User, profile_user: CourseSessionUser) -> bool:
if user.is_superuser:
return True
@ -311,29 +286,40 @@ def can_view_course_completions(
)
def can_complete_learning_content(user: User, course_session_id: int) -> bool:
return is_course_session_member(
user, course_session_id
) or is_course_session_expert(user, course_session_id)
def course_session_permissions(user: User, course_session_id: int) -> list[str]:
course_session = CourseSession.objects.get(id=course_session_id)
is_supervisor = is_course_session_supervisor(user, course_session_id)
is_expert = is_course_session_expert(user, course_session_id)
is_member = is_course_session_member(user, course_session_id)
is_learning_mentor = is_course_session_learning_mentor(user, course_session_id)
course_has_learning_mentor = (
course_session.course.configuration.enable_learning_mentor
)
has_learning_mentor = course_has_learning_mentor and (
is_member or is_expert or is_learning_mentor
)
return _action_list(
{
"learning-mentor": has_learning_mentor(user, course_session_id),
"learning-mentor::edit-mentors": can_edit_mentors(user, course_session_id),
"learning-mentor::guide-members": can_guide_members(
user, course_session_id
),
# roles
"is_supervisor": is_supervisor,
"is_expert": is_expert,
"is_member": is_member,
"is_learning_mentor": is_learning_mentor,
# actions
"learning-mentor": has_learning_mentor,
"learning-mentor::edit-mentors": has_learning_mentor and is_member,
"learning-mentor::guide-members": course_has_learning_mentor
and is_learning_mentor,
"preview": has_course_session_preview(user, course_session_id),
"media-library": has_media_library(user, course_session_id),
"appointments": has_appointments(user, course_session_id),
"expert-cockpit": is_course_session_expert(user, course_session_id),
"learning-path": is_course_session_member(user, course_session_id),
"competence-navi": is_course_session_member(user, course_session_id),
"complete-learning-content": can_complete_learning_content(
user, course_session_id
),
"media-library": is_supervisor or is_expert or is_member,
"appointments": is_supervisor or is_expert or is_member,
"expert-cockpit": is_expert,
"learning-path": is_member,
"competence-navi": is_member,
"complete-learning-content": is_expert or is_member,
}
)