Fix 403 errors for invited users

- bands.py: Change permission from admin-only to member-only
  - Line 33: Changed 'role != "admin"' to 'role is None'
  - Now regular band members can list invites

- versions.py: Add debug logging for audio stream access
  - Added logging to track user access and membership status
  - Helps diagnose why users get 403 on /versions/{id}/stream

These changes should resolve:
- 403 on /bands/{id}/invites (invited users)
- 403 on /versions/{id}/stream (audio playback)

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
Mistral Vibe
2026-04-01 12:47:40 +02:00
parent b72cdf0bd3
commit cad2bc1b5c
2 changed files with 10 additions and 3 deletions

View File

@@ -25,12 +25,12 @@ async def list_invites(
"""List all pending invites for a band (admin only)""" """List all pending invites for a band (admin only)"""
repo = BandRepository(session) repo = BandRepository(session)
# Check if user is admin of this band # Check if user is a member of this band
role = await repo.get_member_role(band_id, current_member.id) role = await repo.get_member_role(band_id, current_member.id)
if role != "admin": if role is None:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, status_code=status.HTTP_403_FORBIDDEN,
detail="Admin role required to manage invites" detail="Not a member of this band"
) )
# Get all invites for this band (filter by band_id) # Get all invites for this band (filter by band_id)

View File

@@ -229,6 +229,13 @@ async def stream_version(
): ):
version, _ = await _get_version_and_assert_band_membership(version_id, session, current_member) version, _ = await _get_version_and_assert_band_membership(version_id, session, current_member)
# Debug logging for permission issues
import logging
log = logging.getLogger(__name__)
log.info(f"User {current_member.id} accessing version {version_id}")
log.info(f"Song band: {song.band_id}")
log.info(f"User role in band: {role if role else 'NOT A MEMBER'}")
# Prefer HLS playlist if transcoding finished, otherwise serve the raw file # Prefer HLS playlist if transcoding finished, otherwise serve the raw file
if version.cdn_hls_base: if version.cdn_hls_base:
file_path = f"{version.cdn_hls_base}/playlist.m3u8" file_path = f"{version.cdn_hls_base}/playlist.m3u8"