Add documents permission
This commit is contained in:
parent
3d75af885c
commit
0b9ebf9e21
|
|
@ -4,12 +4,14 @@ from rest_framework.response import Response
|
||||||
|
|
||||||
from vbv_lernwelt.course.models import CircleDocument
|
from vbv_lernwelt.course.models import CircleDocument
|
||||||
from vbv_lernwelt.course.serializers import CircleDocumentSerializer
|
from vbv_lernwelt.course.serializers import CircleDocumentSerializer
|
||||||
from vbv_lernwelt.iam.permissions import has_course_session_access
|
from vbv_lernwelt.iam.permissions import (
|
||||||
|
has_course_session_document_access,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@api_view(["GET"])
|
@api_view(["GET"])
|
||||||
def get_course_session_documents(request, course_session_id):
|
def get_course_session_documents(request, course_session_id):
|
||||||
if not has_course_session_access(request.user, course_session_id):
|
if not has_course_session_document_access(request.user, course_session_id):
|
||||||
raise PermissionDenied()
|
raise PermissionDenied()
|
||||||
|
|
||||||
circle_documents = CircleDocument.objects.filter(
|
circle_documents = CircleDocument.objects.filter(
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,19 @@ def has_course_session_access(user, course_session_id: int):
|
||||||
).exists()
|
).exists()
|
||||||
|
|
||||||
|
|
||||||
|
def has_course_session_document_access(user, course_session_id: int):
|
||||||
|
if user.is_superuser:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return (
|
||||||
|
CourseSessionUser.objects.filter(
|
||||||
|
course_session_id=course_session_id, user=user
|
||||||
|
).exists()
|
||||||
|
or is_course_session_berufsbildner(user, course_session_id)
|
||||||
|
or CourseSessionGroup.objects.filter(course_session=course_session_id, supervisor=user.id).exists()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def has_course_session_preview(user, course_session_id: int):
|
def has_course_session_preview(user, course_session_id: int):
|
||||||
if user.is_superuser:
|
if user.is_superuser:
|
||||||
return True
|
return True
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,152 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from vbv_lernwelt.course.creators.test_utils import (
|
||||||
|
create_course,
|
||||||
|
create_course_session,
|
||||||
|
create_user,
|
||||||
|
)
|
||||||
|
from vbv_lernwelt.course.models import CourseSessionUser
|
||||||
|
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
|
||||||
|
from vbv_lernwelt.iam.permissions import (
|
||||||
|
has_course_session_document_access,
|
||||||
|
)
|
||||||
|
from vbv_lernwelt.learning_mentor.models import (
|
||||||
|
AgentParticipantRelation,
|
||||||
|
AgentParticipantRoleType,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class PermissionsTestCase(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.course, _ = create_course("Test Course")
|
||||||
|
self.course_session = create_course_session(
|
||||||
|
course=self.course, title="Test Session"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.other_course_session = create_course_session(
|
||||||
|
course=self.course, title="Other Session"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.user = create_user("user")
|
||||||
|
|
||||||
|
def test_regionenleiter_has_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
csg = CourseSessionGroup.objects.create(name="Test Group", course=self.course)
|
||||||
|
csg.course_session.add(self.course_session)
|
||||||
|
csg.supervisor.add(self.user)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.course_session.id)
|
||||||
|
|
||||||
|
some = CourseSessionGroup.objects.filter(course_session=self.course_session.id, supervisor=self.user.id)
|
||||||
|
print(some)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertTrue(has_access)
|
||||||
|
|
||||||
|
def test_regionenleiter_has_no_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
csg = CourseSessionGroup.objects.create(name="Test Group", course=self.course)
|
||||||
|
csg.course_session.add(self.other_course_session)
|
||||||
|
csg.supervisor.add(self.user)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.course_session.id)
|
||||||
|
|
||||||
|
some = CourseSessionGroup.objects.filter(course_session=self.course_session.id, supervisor=self.user.id)
|
||||||
|
print(some)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertFalse(has_access)
|
||||||
|
|
||||||
|
def test_expert_has_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
_csu = CourseSessionUser.objects.create(
|
||||||
|
course_session=self.course_session,
|
||||||
|
user=self.user,
|
||||||
|
role=CourseSessionUser.Role.EXPERT,
|
||||||
|
)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.course_session.id)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertTrue(has_access)
|
||||||
|
|
||||||
|
def test_expert_has_no_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
_csu = CourseSessionUser.objects.create(
|
||||||
|
course_session=self.course_session,
|
||||||
|
user=self.user,
|
||||||
|
role=CourseSessionUser.Role.EXPERT,
|
||||||
|
)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.other_course_session.id)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertFalse(has_access)
|
||||||
|
|
||||||
|
def test_member_has_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
_csu = CourseSessionUser.objects.create(
|
||||||
|
course_session=self.course_session,
|
||||||
|
user=self.user,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.course_session.id)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertTrue(has_access)
|
||||||
|
|
||||||
|
def test_member_has_no_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
_csu = CourseSessionUser.objects.create(
|
||||||
|
course_session=self.course_session,
|
||||||
|
user=self.user,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.other_course_session.id)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertFalse(has_access)
|
||||||
|
|
||||||
|
def test_berufsbildner_has_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
member = create_user("member")
|
||||||
|
_csu = CourseSessionUser.objects.create(
|
||||||
|
course_session=self.course_session,
|
||||||
|
user=member,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
AgentParticipantRelation.objects.create(agent=self.user, participant=_csu,
|
||||||
|
role=AgentParticipantRoleType.BERUFSBILDNER.value)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.course_session.id)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertTrue(has_access)
|
||||||
|
|
||||||
|
def test_berufsbildner_has_no_course_session_document_access(self):
|
||||||
|
# GIVEN
|
||||||
|
member = create_user("member")
|
||||||
|
_csu = CourseSessionUser.objects.create(
|
||||||
|
course_session=self.other_course_session,
|
||||||
|
user=member,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
)
|
||||||
|
|
||||||
|
AgentParticipantRelation.objects.create(agent=self.user, participant=_csu,
|
||||||
|
role=AgentParticipantRoleType.BERUFSBILDNER.value)
|
||||||
|
|
||||||
|
# WHEN
|
||||||
|
has_access = has_course_session_document_access(self.user, self.course_session.id)
|
||||||
|
|
||||||
|
# THEN
|
||||||
|
self.assertFalse(has_access)
|
||||||
Loading…
Reference in New Issue