from ..core.config import config from ..utils.access_permissions import BaseAccessPermissions class MotionAccessPermissions(BaseAccessPermissions): """ Access permissions container for Motion and MotionViewSet. """ def check_permissions(self, user): """ Returns True if the user has read access model instances. """ return user.has_perm('motions.can_see') def get_serializer_class(self, user=None): """ Returns serializer class. """ from .serializers import MotionSerializer return MotionSerializer def get_restricted_data(self, full_data, user): """ Returns the restricted serialized data for the instance prepared for the user. Removes non public comment fields for some unauthorized users. """ if user.has_perm('motions.can_see_and_manage_comments') or not full_data.get('comments'): data = full_data else: data = full_data.copy() for i, field in enumerate(config['motions_comments']): if not field.get('public'): try: data['comments'][i] = None except IndexError: # No data in range. Just do nothing. pass return data def get_projector_data(self, full_data): """ Returns the restricted serialized data for the instance prepared for the projector. Removes several fields. """ data = full_data.copy() for i, field in enumerate(config['motions_comments']): if not field.get('public'): try: data['comments'][i] = None except IndexError: # No data in range. Just do nothing. pass return data class CategoryAccessPermissions(BaseAccessPermissions): """ Access permissions container for Category and CategoryViewSet. """ def check_permissions(self, user): """ Returns True if the user has read access model instances. """ return user.has_perm('motions.can_see') def get_serializer_class(self, user=None): """ Returns serializer class. """ from .serializers import CategorySerializer return CategorySerializer class WorkflowAccessPermissions(BaseAccessPermissions): """ Access permissions container for Workflow and WorkflowViewSet. """ def check_permissions(self, user): """ Returns True if the user has read access model instances. """ return user.has_perm('motions.can_see') def get_serializer_class(self, user=None): """ Returns serializer class. """ from .serializers import WorkflowSerializer return WorkflowSerializer