From fa863bad637bbff570e4f4cbbe1f9e9341645400 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Wed, 10 Sep 2025 10:31:37 -0500 Subject: [PATCH] limit cameras in live view --- web/src/pages/Live.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/web/src/pages/Live.tsx b/web/src/pages/Live.tsx index b697f8c05..fb386b31b 100644 --- a/web/src/pages/Live.tsx +++ b/web/src/pages/Live.tsx @@ -11,12 +11,15 @@ import LiveCameraView from "@/views/live/LiveCameraView"; import LiveDashboardView from "@/views/live/LiveDashboardView"; import { useTranslation } from "react-i18next"; -import { useEffect, useMemo, useRef } from "react"; +import { useContext, useEffect, useMemo, useRef } from "react"; import useSWR from "swr"; +import { useAllowedCameras } from "@/hooks/use-allowed-cameras"; +import { AuthContext } from "@/context/auth-context"; function Live() { const { t } = useTranslation(["views/live"]); const { data: config } = useSWR("config"); + const { auth } = useContext(AuthContext); // selection @@ -81,19 +84,25 @@ function Live() { // settings + const allowedCameras = useAllowedCameras(); + const includesBirdseye = useMemo(() => { if ( config && Object.keys(config.camera_groups).length && cameraGroup && config.camera_groups[cameraGroup] && - cameraGroup != "default" + cameraGroup != "default" && + (auth.user?.role === "admin" || + auth.user?.role == "viewer" || + !auth.isAuthenticated || + "birdseye" in allowedCameras) ) { return config.camera_groups[cameraGroup].cameras.includes("birdseye"); } else { return false; } - }, [config, cameraGroup]); + }, [config, cameraGroup, allowedCameras, auth]); const cameras = useMemo(() => { if (!config) { @@ -111,13 +120,15 @@ function Live() { .filter( (conf) => conf.enabled_in_config && group.cameras.includes(conf.name), ) + .filter((cam) => allowedCameras.includes(cam.name)) .sort((aConf, bConf) => aConf.ui.order - bConf.ui.order); } return Object.values(config.cameras) .filter((conf) => conf.ui.dashboard && conf.enabled_in_config) + .filter((cam) => allowedCameras.includes(cam.name)) .sort((aConf, bConf) => aConf.ui.order - bConf.ui.order); - }, [config, cameraGroup]); + }, [config, cameraGroup, allowedCameras]); const selectedCamera = useMemo( () => cameras.find((cam) => cam.name == selectedCameraName),