Skip to content
Snippets Groups Projects
Commit da96424b authored by Erwan Rouchet's avatar Erwan Rouchet
Browse files

Add a writable corpora manager method

parent 2edf8f65
No related branches found
No related tags found
No related merge requests found
......@@ -117,7 +117,7 @@ class DataImportDemo(CreateAPIView):
def create(self, request, pk=None, **kwargs):
# Get Datafile
corpora = Corpus.objects.readable(self.request.user).filter(corpus_right__can_write=True)
corpora = Corpus.objects.writable(self.request.user)
datafile = get_object_or_404(DataFile, corpus__in=corpora, id=pk)
# Get volume, defaults to demo one
......@@ -314,7 +314,7 @@ class RepositoryStartImport(RetrieveAPIView):
def get_queryset(self):
return Repository.objects.filter(
credentials__user=self.request.user,
corpus__in=Corpus.objects.readable(self.request.user).filter(corpus_right__can_write=True),
corpus__in=Corpus.objects.writable(self.request.user),
)
def get(self, request, *args, **kwargs):
......
......@@ -253,7 +253,6 @@ class ExternalRepositorySerializer(serializers.BaseSerializer):
return {
'id': data['id'],
'corpus': Corpus.objects.readable(self.request.user)
.filter(corpus_right__can_write=True)
'corpus': Corpus.objects.writable(self.request.user)
.get(id=data['corpus'])
}
......@@ -140,3 +140,17 @@ class CorpusManager(models.Manager):
qs = qs.prefetch_related('corpus_right')
qs = qs.filter(models.Q(public=True) | models.Q(corpus_right__user=user))
return qs
def writable(self, user):
# An anonymous user cannot write anything
if user.is_anonymous:
return super().none()
qs = super().get_queryset().order_by('name')
# Admins have access to every corpus
if user.is_admin:
return qs.all()
# Authenticated users can write only on corpora with ACL
return qs.filter(corpus_right__user=user, corpus_right__can_write=True)
......@@ -43,7 +43,7 @@ class TranscriptionCreateSerializer(serializers.Serializer):
super().__init__(*args, **kwargs)
assert 'request' in self.context, 'An API request is required to initialize this serializer'
self.fields['element'].queryset = Element.objects.filter(
corpus__in=Corpus.objects.readable(self.context['request'].user).filter(corpus_right__can_write=True),
corpus__in=Corpus.objects.writable(self.context['request'].user),
)
......@@ -79,5 +79,5 @@ class TranscriptionsSerializer(serializers.Serializer):
super().__init__(*args, **kwargs)
assert 'request' in self.context, 'An API request is required to initialize this serializer'
self.fields['parent'].queryset = Element.objects.filter(
corpus__in=Corpus.objects.readable(self.context['request'].user).filter(corpus_right__can_write=True),
corpus__in=Corpus.objects.writable(self.context['request'].user),
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment