- Shipped
- August 26, 2026 at 4:48 AM UTC
- Author
- Kamo
- Commit
- dd556dd
**************** handed any authenticated member holding a MemberVoipConfig row the instance-wide unread-voicemail count with no rights check at all, even though VoipVoicemailController.list requires VIEW_VOICEMAIL to serve the very rows this number badges. A member who could never open that list could still be shown a nonzero count on the softphone nav icon and its dropdown, and the browser tab flashing about it — a number they could never clear. Adds a hasRight check that reads kamoSession the same way **************** does (GD bypass, then the rights list), so the two can never disagree about who holds VIEW_VOICEMAIL. An ungated caller gets 0, not a 403, following **************** shape: this is a poll every member's nav hits on every page load, before it knows whether the right applies to them. Missed calls are unchanged and stay ungated: a missed call on the caller's own PhoneCallLog row is their own data, and no right gates it elsewhere. Adds **************** covering the ungated-gets-zero- and-200 case, the held-right case, the GD bypass, and the pre-existing no-VOIP-config zero (unaffected by this change).