main ← fix/allow-unfollow-suspended-users
opened 03:53PM - 30 Mar 26 UTC
The follow button was completely hidden for suspended, staged, and bot users. Th…is meant that if a user followed someone who was later suspended, they had no way to unfollow them without an admin unsuspending and re-suspending the account.
The root cause was that `follow-button.gjs` unconditionally hid the button based on the target user's state, with no distinction between the follow and unfollow actions. On top of that, the `can_follow` serializer field only checked `allow_people_to_follow_me` and not the other states (suspended, staged, bot, self), so the client had to duplicate those checks.
This commit introduces a `Guardian#can_follow?` method as the single source of truth for follow permissions. The serializer delegates to it, and the client simply shows the button when the user is already followed OR can be followed. The `Updater` also uses the guardian as a first check, then determines the specific error reason on failure to provide meaningful error messages.
Other cleanups:
- Replace manual `raise if !current_user` checks with `requires_login`
- Fix mismatched i18n keys (`cannot_follow_*` → `user_cannot_follow_*`)
- Fix typo in locale ("suspend" → "suspended")
https://meta.discourse.org/t/304256