Bläddra i källkod

fix: improve superadmin group assignment during login

Load superadmin group ID from GroupService instead of hardcoding
the group name. First registered user gets automatically assigned
to the superadmin group on login.
Fszontagh 6 månader sedan
förälder
incheckning
d8303bcb6e
1 ändrade filer med 24 tillägg och 6 borttagningar
  1. 24 6
      webserver/src/http_server.cpp

+ 24 - 6
webserver/src/http_server.cpp

@@ -865,13 +865,31 @@ void HttpServer::HandleAuthLogin(const httplib::Request& req, httplib::Response&
             }
         }
 
-        // Determine user groups (superadmin is a special case - first user is superadmin)
+        // Collect user's groups from memberships
         std::vector<std::string> groups;
-        auto all_users = userService_->ListUsers();
-        if (all_users.users.size() == 1 ||
-            (!all_users.users.empty() && all_users.users[0].id == user.id)) {
-            // First user is superadmin
-            groups.push_back("superadmin");
+        if (membershipService_) {
+            auto memberships = membershipService_->ListUserMemberships(user.id);
+            for (const auto& m : memberships.members) {
+                for (const auto& gid : m.group_ids) {
+                    if (std::find(groups.begin(), groups.end(), gid) == groups.end()) {
+                        groups.push_back(gid);
+                    }
+                }
+            }
+        }
+
+        // First registered user is automatically superadmin
+        if (groupService_) {
+            auto superadmin_group = groupService_->GetSuperadminGroup();
+            if (superadmin_group.success && superadmin_group.group) {
+                auto all_users = userService_->ListUsers();
+                if (!all_users.users.empty() && all_users.users[0].id == user.id) {
+                    const auto& sa_id = superadmin_group.group->id;
+                    if (std::find(groups.begin(), groups.end(), sa_id) == groups.end()) {
+                        groups.push_back(sa_id);
+                    }
+                }
+            }
         }
 
         auto tokens = authService_->GenerateTokens(user.id, email, workspace_ids, groups);