mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-27 20:11:14 +00:00
hide replies to posts user cannot see
This is in response to #1870 Users should not see links to posts they are not allowed to see, in their feed. The main question is how to stop that happening. This commit hides all replies to posts if the original post was "followers only" and the user is not a follower of the original poster. The privacy of the reply is not considered relevant (except "direct"). I believe this is the cleanest way to deal with the problem, as it avoids orphaned replies and confusing 404s, and a reply without access to the context of the original post is not particularly useful to anyone. This also feels like it respects the wishes of the original poster more accurately, as it does not draw attention from non-followers to the original followers-only post. A less draconian approach might be to remove the link to the original status in the feed interface, however that simply leads to confusion of another kind since it will make the interface inconsistent. This commit does not change any ActivityPub behaviour - it only affects the Bookwyrm user feeds. This means orphaned posts may be sent to external apps like Mastodon.
This commit is contained in:
parent
d58282bc37
commit
8d593e4498
1 changed files with 11 additions and 1 deletions
|
@ -111,8 +111,18 @@ class ActivityStream(RedisStore):
|
||||||
Q(id__in=status.user.blocks.all()) | Q(blocks=status.user) # not blocked
|
Q(id__in=status.user.blocks.all()) | Q(blocks=status.user) # not blocked
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# don't show replies to statuses the user can't see
|
||||||
|
if status.reply_parent and status.reply_parent.privacy == "followers":
|
||||||
|
audience = audience.filter(
|
||||||
|
Q(id=status.user.id) # if the user is the post's author
|
||||||
|
| Q(id=status.reply_parent.user.id) # if the user is the OG author
|
||||||
|
| (
|
||||||
|
Q(following=status.user) & Q(following=status.reply_parent.user)
|
||||||
|
) # if the user is following both authors
|
||||||
|
).distinct()
|
||||||
|
|
||||||
# only visible to the poster and mentioned users
|
# only visible to the poster and mentioned users
|
||||||
if status.privacy == "direct":
|
elif status.privacy == "direct":
|
||||||
audience = audience.filter(
|
audience = audience.filter(
|
||||||
Q(id=status.user.id) # if the user is the post's author
|
Q(id=status.user.id) # if the user is the post's author
|
||||||
| Q(id__in=status.mention_users.all()) # if the user is mentioned
|
| Q(id__in=status.mention_users.all()) # if the user is mentioned
|
||||||
|
|
Loading…
Reference in a new issue