Переглянути джерело

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 місяців тому
батько
коміт
d8303bcb6e
1 змінених файлів з 24 додано та 6 видалено
  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);