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