import logging from rest_framework import permissions, exceptions logger = logging.getLogger(__name__) class DenyAllPermission(permissions.BasePermission): def has_permission(self, request, view): return False def has_object_permission(self, request, view, obj): return False class MethodPermission(permissions.BasePermission): def has_permission(self, request, view): if not hasattr(view, 'perms_map'): raise Exception('{} do not have perms_map attribute'.format(view.__class__)) try: perms = view.perms_map[request.method.upper()] except KeyError: raise exceptions.MethodNotAllowed(request.method) return request.user.has_perms(perms) class AskTUGModeratorOrStaffWithMethodPermission(permissions.BasePermission): def has_permission(self, request, view): if not hasattr(view, 'perms_map'): raise Exception('{} do not have perms_map attribute'.format(view.__class__)) request.user.is_asktug_moderator = False request.user.is_staff_with_permission = False try: perms = view.perms_map[request.method.upper()] except KeyError: raise exceptions.MethodNotAllowed(request.method) if not (request.user and request.user.is_authenticated): return False if request.user.is_staff: request.user.is_staff_with_permission = request.user.has_perms(perms) asktug_user = request.user.get_asktug_user(log_error_if_not_exists=False) if asktug_user and asktug_user.moderator: request.user.is_asktug_moderator = True return request.user.is_asktug_moderator or request.user.is_staff_with_permission