Skip to content
Snippets Groups Projects
Commit 508b0d23 authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Use rules and differentiate between course details and course in general

parent 6cccf2aa
No related branches found
No related tags found
1 merge request!43Resolve "Rethink permission handling for subject/courses"
Pipeline #187743 passed with warnings
...@@ -15,9 +15,7 @@ view_subjects_predicate = has_person & ( ...@@ -15,9 +15,7 @@ view_subjects_predicate = has_person & (
) )
add_perm("cursus.view_subjects_rule", view_subjects_predicate) add_perm("cursus.view_subjects_rule", view_subjects_predicate)
view_subject_predicate = has_person & ( view_subject_predicate = has_person
has_global_perm("cursus.view_subject") | has_object_perm("cursus.view_subject")
)
add_perm("cursus.view_subject_rule", view_subject_predicate) add_perm("cursus.view_subject_rule", view_subject_predicate)
create_subject_predicate = has_person & has_global_perm("cursus.add_subject") create_subject_predicate = has_person & has_global_perm("cursus.add_subject")
...@@ -38,12 +36,15 @@ view_courses_predicate = has_person & ( ...@@ -38,12 +36,15 @@ view_courses_predicate = has_person & (
) )
add_perm("cursus.view_courses_rule", view_courses_predicate) add_perm("cursus.view_courses_rule", view_courses_predicate)
view_course_predicate = has_person & ( view_course_predicate = has_person
add_perm("cursus.view_course_rule", view_course_predicate)
view_course_details_predicate = has_person & (
is_course_teacher is_course_teacher
| has_global_perm("cursus.view_course") | has_global_perm("cursus.view_course")
| has_object_perm("cursus.view_course") | has_object_perm("cursus.view_course")
) )
add_perm("cursus.view_course_rule", view_course_predicate) add_perm("cursus.view_course_details_rule", view_course_details_predicate)
create_course_predicate = has_person & has_global_perm("cursus.add_course") create_course_predicate = has_person & has_global_perm("cursus.add_course")
add_perm("cursus.create_course_rule", create_course_predicate) add_perm("cursus.create_course_rule", create_course_predicate)
......
...@@ -56,12 +56,9 @@ class SubjectType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): ...@@ -56,12 +56,9 @@ class SubjectType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
@classmethod @classmethod
def get_queryset(cls, queryset, info): def get_queryset(cls, queryset, info):
# FIXME: Permissions... this is just a workaround, if not info.context.user.has_perm("cursus.view_subject_rule"):
# because cursus.view_subject would have to be assigned manually
if not has_person(info.context.user):
raise PermissionDenied() raise PermissionDenied()
return queryset return queryset
# return get_objects_for_user(info.context.user, "cursus.view_subject", Subject)
@staticmethod @staticmethod
def resolve_courses(root, info, **kwargs): def resolve_courses(root, info, **kwargs):
...@@ -132,6 +129,8 @@ class CourseType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): ...@@ -132,6 +129,8 @@ class CourseType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
@staticmethod @staticmethod
def resolve_teachers(root, info, **kwargs): def resolve_teachers(root, info, **kwargs):
if not info.context.user.has_perm("cursus.view_course_details_rule", root):
raise PermissionDenied()
teachers = get_objects_for_user(info.context.user, "core.view_person", root.teachers.all()) teachers = get_objects_for_user(info.context.user, "core.view_person", root.teachers.all())
# Fixme: this following code was copied from aleksis/core/schema/group.py so it should work # Fixme: this following code was copied from aleksis/core/schema/group.py so it should work
...@@ -144,6 +143,8 @@ class CourseType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): ...@@ -144,6 +143,8 @@ class CourseType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
@staticmethod @staticmethod
def resolve_groups(root, info, **kwargs): def resolve_groups(root, info, **kwargs):
if not info.context.user.has_perm("cursus.view_course_details_rule", root):
raise PermissionDenied()
by_permission = get_objects_for_user( by_permission = get_objects_for_user(
info.context.user, "core.view_group", root.groups.all() info.context.user, "core.view_group", root.groups.all()
) )
...@@ -156,12 +157,9 @@ class CourseType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): ...@@ -156,12 +157,9 @@ class CourseType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
@classmethod @classmethod
def get_queryset(cls, queryset, info): def get_queryset(cls, queryset, info):
# FIXME: Permissions... this is just a workaround, if not info.context.user.has_perm("cursus.view_course_rule"):
# because cursus.view_course would have to be assigned manually
if not has_person(info.context.user):
raise PermissionDenied() raise PermissionDenied()
return queryset return queryset
# return get_objects_for_user(info.context.user, "cursus.view_course", Course)
class CourseBatchCreateMutation(DjangoBatchCreateMutation): class CourseBatchCreateMutation(DjangoBatchCreateMutation):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment