diff --git a/Jellyfin.Api/Controllers/LiveTvController.cs b/Jellyfin.Api/Controllers/LiveTvController.cs index 10f1789ad8..5e4e05bede 100644 --- a/Jellyfin.Api/Controllers/LiveTvController.cs +++ b/Jellyfin.Api/Controllers/LiveTvController.cs @@ -144,7 +144,6 @@ public class LiveTvController : BaseJellyfinApiController /// [HttpGet("Channels")] [ProducesResponseType(StatusCodes.Status200OK)] - [Authorize(Policy = Policies.LiveTvAccess)] public ActionResult> GetLiveTvChannels( [FromQuery] ChannelType? type, [FromQuery] Guid? userId, @@ -168,6 +167,15 @@ public class LiveTvController : BaseJellyfinApiController [FromQuery] bool enableFavoriteSorting = false, [FromQuery] bool addCurrentProgram = true) { + // Check if authenticated user has Live TV access + var authenticatedUserId = User.GetUserId(); + var authenticatedUser = _userManager.GetUserById(authenticatedUserId); + if (authenticatedUser == null || !authenticatedUser.HasPermission(PermissionKind.EnableLiveTvAccess)) + { + // Return empty result instead of 403 to prevent metadata manager failures + return new QueryResult(); + } + userId = RequestHelpers.GetUserId(User, userId); var dtoOptions = new DtoOptions { Fields = fields } .AddClientFields(User) @@ -273,7 +281,6 @@ public class LiveTvController : BaseJellyfinApiController /// An containing the live tv recordings. [HttpGet("Recordings")] [ProducesResponseType(StatusCodes.Status200OK)] - [Authorize(Policy = Policies.LiveTvAccess)] public async Task>> GetRecordings( [FromQuery] string? channelId, [FromQuery] Guid? userId, @@ -295,6 +302,15 @@ public class LiveTvController : BaseJellyfinApiController [FromQuery] bool? isLibraryItem, [FromQuery] bool enableTotalRecordCount = true) { + // Check if authenticated user has Live TV access + var authenticatedUserId = User.GetUserId(); + var authenticatedUser = _userManager.GetUserById(authenticatedUserId); + if (authenticatedUser == null || !authenticatedUser.HasPermission(PermissionKind.EnableLiveTvAccess)) + { + // Return empty result instead of 403 to prevent metadata manager failures + return new QueryResult(); + } + userId = RequestHelpers.GetUserId(User, userId); var dtoOptions = new DtoOptions { Fields = fields } .AddClientFields(User)