Pārlūkot izejas kodu

fix: add access control fields to view HTTP handlers

Update HandleCreateView, HandleListViews, HandleGetView, and
HandleUpdateView to parse and return visible_to_groups and
editable_by_groups fields in the settings object.
Fszontagh 6 mēneši atpakaļ
vecāks
revīzija
bf3e701560
1 mainītis faili ar 42 papildinājumiem un 4 dzēšanām
  1. 42 4
      webserver/src/http_server.cpp

+ 42 - 4
webserver/src/http_server.cpp

@@ -4072,6 +4072,21 @@ void HttpServer::HandleCreateView(const httplib::Request& req, httplib::Response
             request.settings.icon = settings_json.value("icon", "");
             request.settings.filters = settings_json.value("filters", nlohmann::json::object());
             request.settings.sort = settings_json.value("sort", nlohmann::json::object());
+            // Parse access control arrays
+            if (settings_json.contains("visible_to_groups") && settings_json["visible_to_groups"].is_array()) {
+                for (const auto& group : settings_json["visible_to_groups"]) {
+                    if (group.is_string()) {
+                        request.settings.visible_to_groups.push_back(group.get<std::string>());
+                    }
+                }
+            }
+            if (settings_json.contains("editable_by_groups") && settings_json["editable_by_groups"].is_array()) {
+                for (const auto& group : settings_json["editable_by_groups"]) {
+                    if (group.is_string()) {
+                        request.settings.editable_by_groups.push_back(group.get<std::string>());
+                    }
+                }
+            }
         }
 
         auto result = viewService_->CreateView(request);
@@ -4134,7 +4149,9 @@ void HttpServer::HandleCreateView(const httplib::Request& req, httplib::Response
             {"show_in_sidebar", result.view->settings.show_in_sidebar},
             {"icon", result.view->settings.icon},
             {"filters", result.view->settings.filters},
-            {"sort", result.view->settings.sort}
+            {"sort", result.view->settings.sort},
+            {"visible_to_groups", result.view->settings.visible_to_groups},
+            {"editable_by_groups", result.view->settings.editable_by_groups}
         };
 
         res.status = 201;
@@ -4224,7 +4241,9 @@ void HttpServer::HandleListViews(const httplib::Request& req, httplib::Response&
             view_json["settings"] = {
                 {"is_default", view.settings.is_default},
                 {"show_in_sidebar", view.settings.show_in_sidebar},
-                {"icon", view.settings.icon}
+                {"icon", view.settings.icon},
+                {"visible_to_groups", view.settings.visible_to_groups},
+                {"editable_by_groups", view.settings.editable_by_groups}
             };
 
             views_json.push_back(view_json);
@@ -4340,7 +4359,9 @@ void HttpServer::HandleGetView(const httplib::Request& req, httplib::Response& r
             {"show_in_sidebar", result.view->settings.show_in_sidebar},
             {"icon", result.view->settings.icon},
             {"filters", result.view->settings.filters},
-            {"sort", result.view->settings.sort}
+            {"sort", result.view->settings.sort},
+            {"visible_to_groups", result.view->settings.visible_to_groups},
+            {"editable_by_groups", result.view->settings.editable_by_groups}
         };
 
         res.set_content(view_json.dump(), "application/json");
@@ -4452,6 +4473,21 @@ void HttpServer::HandleUpdateView(const httplib::Request& req, httplib::Response
             settings.icon = settings_json.value("icon", "");
             settings.filters = settings_json.value("filters", nlohmann::json::object());
             settings.sort = settings_json.value("sort", nlohmann::json::object());
+            // Parse access control arrays
+            if (settings_json.contains("visible_to_groups") && settings_json["visible_to_groups"].is_array()) {
+                for (const auto& group : settings_json["visible_to_groups"]) {
+                    if (group.is_string()) {
+                        settings.visible_to_groups.push_back(group.get<std::string>());
+                    }
+                }
+            }
+            if (settings_json.contains("editable_by_groups") && settings_json["editable_by_groups"].is_array()) {
+                for (const auto& group : settings_json["editable_by_groups"]) {
+                    if (group.is_string()) {
+                        settings.editable_by_groups.push_back(group.get<std::string>());
+                    }
+                }
+            }
             request.settings = settings;
         }
 
@@ -4515,7 +4551,9 @@ void HttpServer::HandleUpdateView(const httplib::Request& req, httplib::Response
             {"show_in_sidebar", result.view->settings.show_in_sidebar},
             {"icon", result.view->settings.icon},
             {"filters", result.view->settings.filters},
-            {"sort", result.view->settings.sort}
+            {"sort", result.view->settings.sort},
+            {"visible_to_groups", result.view->settings.visible_to_groups},
+            {"editable_by_groups", result.view->settings.editable_by_groups}
         };
 
         res.set_content(view_json.dump(), "application/json");