forked from mirrors/bookwyrm
Consider group membership for list cache
This commit is contained in:
parent
3358e45086
commit
0012f4464d
2 changed files with 45 additions and 12 deletions
|
@ -64,19 +64,32 @@ class ListsStream(RedisStore):
|
|||
Q(id__in=book_list.user.blocks.all()) | Q(blocks=book_list.user)
|
||||
)
|
||||
|
||||
# TODO: groups
|
||||
|
||||
group = book_list.group
|
||||
# only visible to the poster and mentioned users
|
||||
if book_list.privacy == "direct":
|
||||
audience = audience.filter(
|
||||
Q(id=book_list.user.id) # if the user is the post's author
|
||||
)
|
||||
if group:
|
||||
audience = audience.filter(
|
||||
Q(id=book_list.user.id) # if the user is the post's author
|
||||
| ~Q(groups=group.memberships) # if the user is in the group
|
||||
)
|
||||
else:
|
||||
audience = audience.filter(
|
||||
Q(id=book_list.user.id) # if the user is the post's author
|
||||
)
|
||||
# only visible to the poster's followers and tagged users
|
||||
elif book_list.privacy == "followers":
|
||||
audience = audience.filter(
|
||||
Q(id=book_list.user.id) # if the user is the post's author
|
||||
| Q(following=book_list.user) # if the user is following the author
|
||||
)
|
||||
if group:
|
||||
audience = audience.filter(
|
||||
Q(id=book_list.user.id) # if the user is the list's owner
|
||||
| Q(following=book_list.user) # if the user is following the pwmer
|
||||
# if a user is in the group
|
||||
| Q(memberships__group__id=book_list.group.id)
|
||||
)
|
||||
else:
|
||||
audience = audience.filter(
|
||||
Q(id=book_list.user.id) # if the user is the list's owner
|
||||
| Q(following=book_list.user) # if the user is following the pwmer
|
||||
)
|
||||
return audience.distinct()
|
||||
|
||||
def get_stores_for_object(self, obj):
|
||||
|
|
|
@ -92,7 +92,7 @@ class ListsStream(TestCase):
|
|||
book_list = models.List.objects.create(
|
||||
user=self.local_user,
|
||||
name="hi",
|
||||
privacy="direct",
|
||||
privacy="followers",
|
||||
)
|
||||
users = self.stream.get_audience(book_list)
|
||||
self.assertTrue(self.local_user in users)
|
||||
|
@ -105,9 +105,29 @@ class ListsStream(TestCase):
|
|||
book_list = models.List.objects.create(
|
||||
user=self.remote_user,
|
||||
name="hi",
|
||||
privacy="direct",
|
||||
privacy="followers",
|
||||
)
|
||||
users = self.stream.get_audience(book_list)
|
||||
self.assertTrue(self.local_user in users)
|
||||
self.assertFalse(self.another_user in users)
|
||||
|
||||
def test_get_audience_followers_with_group(self, *_):
|
||||
"""get a list of users that should see a list"""
|
||||
group = models.Group.objects.create(name="test group", user=self.remote_user)
|
||||
models.GroupMember.objects.create(
|
||||
group=group,
|
||||
user=self.local_user,
|
||||
)
|
||||
|
||||
book_list = models.List.objects.create(
|
||||
user=self.remote_user, name="hi", privacy="followers", curation="group"
|
||||
)
|
||||
users = self.stream.get_audience(book_list)
|
||||
self.assertFalse(self.local_user in users)
|
||||
|
||||
book_list.group = group
|
||||
book_list.save(broadcast=False)
|
||||
|
||||
users = self.stream.get_audience(book_list)
|
||||
self.assertTrue(self.local_user in users)
|
||||
self.assertFalse(self.another_user in users)
|
||||
self.assertFalse(self.remote_user in users)
|
||||
|
|
Loading…
Reference in a new issue