ソースを参照

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);