members/admin: fix missing viewable annotation when list_global_member permission is present

jenkins
Christian Merten 3 years ago
parent 7f2c1ba00e
commit 45e30ceec7
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -51,9 +51,14 @@ class FilteredQuerysetAdminMixin:
if ordering:
qs = qs.order_by(*ordering)
queryset = qs
perm = '%s.list_global_%s' % (self.opts.app_label, self.opts.model_name)
if request.user.has_perm(perm):
return queryset
list_global_perm = '%s.list_global_%s' % (self.opts.app_label, self.opts.model_name)
if request.user.has_perm(list_global_perm):
view_global_perm = '%s.view_global_%s' % (self.opts.app_label, self.opts.model_name)
if request.user.has_perm(view_global_perm):
return queryset
if hasattr(request.user, 'member'):
return request.user.member.annotate_view_permission(queryset, model=self.model)
return queryset.annotate(_viewable=models.Value(False))
if not hasattr(request.user, 'member'):
return self.model.objects.none()

@ -424,6 +424,28 @@ class Member(Person):
return filtered.annotate(_viewable=Case(When(pk__in=view_pks, then=Value(True)), default=Value(False), output_field=models.BooleanField()))
def annotate_view_permission(self, queryset, model):
name = model._meta.object_name
if name != 'Member':
return queryset
view_pks = [self.pk]
if hasattr(self, 'permissions'):
view_pks += [ m.pk for m in self.permissions.view_members.all() ]
for group in self.permissions.view_groups.all():
view_pks += [ m.pk for m in group.member_set.all() ]
for group in self.group.all():
if hasattr(group, 'permissions'):
view_pks += [ m.pk for m in group.permissions.view_members.all() ]
for gr in group.permissions.view_groups.all():
view_pks += [ m.pk for m in gr.member_set.all()]
return queryset.annotate(_viewable=Case(When(pk__in=view_pks, then=Value(True)), default=Value(False), output_field=models.BooleanField()))
def filter_messages_by_permissions(self, queryset, annotate=False):
# ignores annotate
return queryset.filter(created_by=self)

Loading…
Cancel
Save