diff --git a/.sqlx/query-df601202e8bf0cb5978581ebea3b5799549a3a4bf9735f7fd160b359653e5fe5.json b/.sqlx/query-4df55e50b2f092cbb5d22fa2a99ddf5f13b6d71296c7e9b7859a6ecbb495dbfb.json similarity index 70% rename from .sqlx/query-df601202e8bf0cb5978581ebea3b5799549a3a4bf9735f7fd160b359653e5fe5.json rename to .sqlx/query-4df55e50b2f092cbb5d22fa2a99ddf5f13b6d71296c7e9b7859a6ecbb495dbfb.json index b9cfb04d79..9991e38c55 100644 --- a/.sqlx/query-df601202e8bf0cb5978581ebea3b5799549a3a4bf9735f7fd160b359653e5fe5.json +++ b/.sqlx/query-4df55e50b2f092cbb5d22fa2a99ddf5f13b6d71296c7e9b7859a6ecbb495dbfb.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT g.id, g.name, COALESCE(ARRAY_AGG(DISTINCT u.username) FILTER (WHERE u.username IS NOT NULL), '{}') \"members!\", COALESCE(ARRAY_AGG(DISTINCT wn.name) FILTER (WHERE wn.name IS NOT NULL), '{}') \"vpn_locations!\", is_admin FROM \"group\" g LEFT JOIN \"group_user\" gu ON gu.group_id = g.id LEFT JOIN \"user\" u ON u.id = gu.user_id LEFT JOIN \"wireguard_network_allowed_group\" wnag ON wnag.group_id = g.id LEFT JOIN \"wireguard_network\" wn ON wn.allow_all_groups OR wn.id = wnag.network_id GROUP BY g.name, g.id", + "query": "SELECT g.id, g.name, COALESCE(ARRAY_AGG(DISTINCT u.username) FILTER (WHERE u.username IS NOT NULL), '{}') \"members!\", COALESCE(ARRAY_AGG(DISTINCT wn.name) FILTER (WHERE wn.name IS NOT NULL), '{}') \"vpn_locations!\", is_admin FROM \"group\" g LEFT JOIN \"group_user\" gu ON gu.group_id = g.id LEFT JOIN \"user\" u ON u.id = gu.user_id LEFT JOIN LATERAL (SELECT wn_inner.name FROM \"wireguard_network\" wn_inner JOIN \"wireguard_network_allowed_group\" wnag ON wnag.network_id = wn_inner.id AND wnag.group_id = g.id UNION SELECT wn_all.name FROM \"wireguard_network\" wn_all WHERE wn_all.allow_all_groups) wn ON true GROUP BY g.name, g.id", "describe": { "columns": [ { @@ -40,5 +40,5 @@ false ] }, - "hash": "df601202e8bf0cb5978581ebea3b5799549a3a4bf9735f7fd160b359653e5fe5" -} + "hash": "4df55e50b2f092cbb5d22fa2a99ddf5f13b6d71296c7e9b7859a6ecbb495dbfb" +} \ No newline at end of file diff --git a/crates/defguard_core/src/handlers/group.rs b/crates/defguard_core/src/handlers/group.rs index e672decf40..480d99790f 100644 --- a/crates/defguard_core/src/handlers/group.rs +++ b/crates/defguard_core/src/handlers/group.rs @@ -188,8 +188,13 @@ pub(crate) async fn list_groups_info( FROM \"group\" g \ LEFT JOIN \"group_user\" gu ON gu.group_id = g.id \ LEFT JOIN \"user\" u ON u.id = gu.user_id \ - LEFT JOIN \"wireguard_network_allowed_group\" wnag ON wnag.group_id = g.id \ - LEFT JOIN \"wireguard_network\" wn ON wn.allow_all_groups OR wn.id = wnag.network_id \ + LEFT JOIN LATERAL (\ + SELECT wn_inner.name FROM \"wireguard_network\" wn_inner \ + JOIN \"wireguard_network_allowed_group\" wnag ON wnag.network_id = wn_inner.id AND wnag.group_id = g.id \ + UNION \ + SELECT wn_all.name FROM \"wireguard_network\" wn_all \ + WHERE wn_all.allow_all_groups\ + ) wn ON true \ GROUP BY g.name, g.id" ) .fetch_all(&appstate.pool)