mirror of
https://github.com/ipnet-mesh/meshcore-hub.git
synced 2026-07-28 20:42:36 +02:00
fdea046749
The Route Health and Routes Trend dashboard widgets pull from GET /api/v1/dashboard/routes-overview, which previously filtered routes by the caller's role tier (anonymous saw community, admin saw all four tiers). Operators and admins therefore saw member/operator/ admin-tier routes mixed into the dashboard, even though the dedicated /routes page is the working surface for managing those private tiers. This change makes the dashboard widget surface ONLY community-tier routes, regardless of the caller's role. Operators and admins still see all four tiers on the /routes management page (unchanged). Implementation: - get_routes_overview: drop resolve_user_role/get_max_visibility_level; push the filter into the SQL query (where Route.visibility == RouteVisibility.COMMUNITY.value) so higher-tier rows are no longer loaded just to be discarded. - _dashboard_routes_overview_key_builder: drop the role dimension from the cache key. The response is now identical across roles, so the per-role cache slots were storing four identical copies. The prefix is preserved so invalidate_routes' pattern invalidation still hits. - Drop unused VISIBILITY_LEVELS import; add RouteVisibility to the models import. Tests: - test_visibility_filter_hides_admin_routes renamed to test_dashboard_only_shows_community_routes_regardless_of_role; now seeds one route per visibility tier and asserts every role (anonymous/member/operator/admin) sees only ['Public']. - test_cache_key_is_role_scoped renamed to test_cache_key_is_role_agnostic; asserts all four role-variants produce the SAME cache key (no 'role=' dimension).