Skip to content

Commit

Permalink
feat: allow commenting by regular users when posting media requires a…
Browse files Browse the repository at this point in the history
…dvanced permissions (#1023)
  • Loading branch information
KyleMaas authored Oct 2, 2024
1 parent f7136e2 commit 90e5939
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
28 changes: 28 additions & 0 deletions cms/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ def has_permission(self, request, view):
return user_allowed_to_upload(request)


class IsAuthorizedToAddComment(permissions.BasePermission):
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return True
return user_allowed_to_comment(request)


class IsUserOrManager(permissions.BasePermission):
"""To be used in cases where request.user is either the
object owner, or anyone amongst MediaCMS managers
Expand Down Expand Up @@ -66,3 +73,24 @@ def user_allowed_to_upload(request):
if request.user.advancedUser:
return True
return False


def user_allowed_to_comment(request):
"""Any custom logic for whether a user is allowed
to comment lives here
"""
if request.user.is_anonymous:
return False
if request.user.is_superuser:
return True

# Default is "all"
if not hasattr(settings, "CAN_COMMENT") or settings.CAN_COMMENT == "all":
return True
elif settings.CAN_COMMENT == "email_verified":
if request.user.email_is_verified:
return True
elif settings.CAN_COMMENT == "advancedUser":
if request.user.advancedUser:
return True
return False
4 changes: 4 additions & 0 deletions cms/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
# valid options include 'all', 'email_verified', 'advancedUser'
CAN_ADD_MEDIA = "all"

# who can comment
# valid options include 'all', 'email_verified', 'advancedUser'
CAN_COMMENT = "all"

# valid choices here are 'public', 'private', 'unlisted
PORTAL_WORKFLOW = "public"

Expand Down
9 changes: 7 additions & 2 deletions files/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@

from actions.models import USER_MEDIA_ACTIONS, MediaAction
from cms.custom_pagination import FastPaginationWithoutCount
from cms.permissions import IsAuthorizedToAdd, IsUserOrEditor, user_allowed_to_upload
from cms.permissions import (
IsAuthorizedToAdd,
IsAuthorizedToAddComment,
IsUserOrEditor,
user_allowed_to_upload,
)
from users.models import User

from .forms import ContactForm, MediaForm, SubtitleForm
Expand Down Expand Up @@ -1204,7 +1209,7 @@ class CommentDetail(APIView):
Delete comment (DELETE)
"""

permission_classes = (IsAuthorizedToAdd,)
permission_classes = (IsAuthorizedToAddComment,)
parser_classes = (JSONParser, MultiPartParser, FormParser, FileUploadParser)

def get_object(self, friendly_token):
Expand Down

0 comments on commit 90e5939

Please sign in to comment.