Skip to content

Commit 9a72ee0

Browse files
authored
Adds IsAdminOrCourseCreator permission class (#29)
* added permission class for course creator * added permission class to related views
1 parent fae2ed2 commit 9a72ee0

File tree

4 files changed

+22
-6
lines changed

4 files changed

+22
-6
lines changed

ecommerce/extensions/api/v2/views/coupons.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from django.shortcuts import get_object_or_404
1212
from oscar.core.loading import get_model
1313
from rest_framework import filters, generics, serializers, status, viewsets
14-
from rest_framework.permissions import IsAdminUser, IsAuthenticated
14+
from rest_framework.permissions import IsAuthenticated
1515
from rest_framework.response import Response
1616

1717
from ecommerce.core.constants import COUPON_PRODUCT_CLASS_NAME
@@ -25,6 +25,7 @@
2525
from ecommerce.extensions.basket.utils import prepare_basket
2626
from ecommerce.extensions.catalogue.utils import create_coupon_product, get_or_create_catalog
2727
from ecommerce.extensions.checkout.mixins import EdxOrderPlacementMixin
28+
from ecommerce.extensions.edly_ecommerce_app.permissions import IsAdminOrCourseCreator
2829
from ecommerce.extensions.payment.processors.invoice import InvoicePayment
2930
from ecommerce.extensions.voucher.models import CouponVouchers
3031
from ecommerce.extensions.voucher.utils import (
@@ -53,7 +54,7 @@
5354

5455
class CouponViewSet(EdxOrderPlacementMixin, viewsets.ModelViewSet):
5556
""" Coupon resource. """
56-
permission_classes = (IsAuthenticated, IsAdminUser)
57+
permission_classes = (IsAuthenticated, IsAdminOrCourseCreator)
5758
filter_backends = (filters.DjangoFilterBackend,)
5859
filter_class = ProductFilter
5960

ecommerce/extensions/api/v2/views/courses.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
from oscar.core.loading import get_model
55
from rest_framework import status
66
from rest_framework.decorators import detail_route
7-
from rest_framework.permissions import IsAdminUser, IsAuthenticated
7+
from rest_framework.permissions import IsAuthenticated
88
from rest_framework.response import Response
99

1010
from ecommerce.core.constants import COURSE_ID_REGEX
1111
from ecommerce.courses.models import Course
1212
from ecommerce.extensions.api import serializers
1313
from ecommerce.extensions.api.v2.views import NonDestroyableModelViewSet
1414
from ecommerce.extensions.edly_ecommerce_app.helpers import is_valid_site_course
15+
from ecommerce.extensions.edly_ecommerce_app.permissions import IsAdminOrCourseCreator
1516

1617
Product = get_model('catalogue', 'Product')
1718
ProductAttributeValue = get_model('catalogue', 'ProductAttributeValue')
@@ -28,7 +29,7 @@ class CourseViewSet(NonDestroyableModelViewSet):
2829
)
2930
lookup_value_regex = COURSE_ID_REGEX
3031
serializer_class = serializers.CourseSerializer
31-
permission_classes = (IsAuthenticated, IsAdminUser,)
32+
permission_classes = (IsAuthenticated, IsAdminOrCourseCreator,)
3233

3334
def get_queryset(self):
3435
site_configuration = self.request.site.siteconfiguration

ecommerce/extensions/api/v2/views/publication.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
"""HTTP endpoints for course publication."""
22
from rest_framework import generics, status
3-
from rest_framework.permissions import IsAdminUser, IsAuthenticated
3+
from rest_framework.permissions import IsAuthenticated
44
from rest_framework.response import Response
55

66
from ecommerce.extensions.api import serializers
7+
from ecommerce.extensions.edly_ecommerce_app.permissions import IsAdminOrCourseCreator
78
from ecommerce.extensions.partner.shortcuts import get_partner_for_site
89

910

@@ -12,7 +13,7 @@ class AtomicPublicationView(generics.CreateAPIView, generics.UpdateAPIView):
1213
1314
If either fails, the entire operation is rolled back. This keeps Otto and the LMS in sync.
1415
"""
15-
permission_classes = (IsAuthenticated, IsAdminUser,)
16+
permission_classes = (IsAuthenticated, IsAdminOrCourseCreator,)
1617
serializer_class = serializers.AtomicPublicationSerializer
1718

1819
def get_serializer_context(self):
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from rest_framework.permissions import BasePermission
2+
from ecommerce.extensions.edly_ecommerce_app.helpers import user_is_course_creator
3+
4+
5+
class IsAdminOrCourseCreator(BasePermission):
6+
"""
7+
Checks if logged in user is staff or a course creator.
8+
"""
9+
10+
def has_permission(self, request, view):
11+
is_admin = request.user.is_staff or request.user.is_superuser
12+
is_course_creator = user_is_course_creator(request)
13+
return is_admin or is_course_creator

0 commit comments

Comments
 (0)