Kaynağa Gözat

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 ay önce
ebeveyn
işleme
d8303bcb6e
1 değiştirilmiş dosya ile 24 ekleme ve 6 silme
  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);