code: def get_fields(self):
          
          ret = OrderedDict()
  
          # no rights to see anything
          if not self.user:
              return ret
  
          # all fields that can be accessed through serializer
          fields = super(ModelPermissionsSerializer, self).get_fields()
  
          # superuser can see all the fields
          if self.user.is_superuser:
              return fields
  
          # fields that can be accessed by auhtenticated user
          allowed_fields = self._get_user_allowed_fields()
          for allowed_field in allowed_fields:
              field = fields[allowed_field.name]
  
              # subfields are NestedModelSerializer
              if isinstance(field, ModelPermissionsSerializer):
                  # no rights on subfield's fields
                  # calculate how the relation should be retrieved
                  if not field.get_fields():
                      field_cls = field._related_class
                      kwargs = get_relation_kwargs(allowed_field.name,
                                                   field.info)
                      if not issubclass(field_cls,
                                        serializers.HyperlinkedRelatedField):
                          kwargs.pop('view_name', None)
                      field = field_cls(**kwargs)
  
              ret[allowed_field.name] = field
          return ret
docs: Calculate fields that can be accessed by authenticated user.