diff --git a/api.php b/api.php index 6323d78..cb26ae6 100644 --- a/api.php +++ b/api.php @@ -770,18 +770,24 @@ switch ($action) { $password = $input['password'] ?? ''; $u = dbGetUserByUsername($username); if ($u && password_verify($password, $u['password_hash'])) { + $userCompanies = $u['companies'] ?? []; + // Domain-pohjainen kirjautumisrajoitus + $host = strtolower(explode(':', $_SERVER['HTTP_HOST'] ?? '')[0]); + $domainCompany = dbGetCompanyByDomain($host); + $domainCompanyId = $domainCompany ? $domainCompany['id'] : ''; + // Jos domain kuuluu tietylle yritykselle, vain sen yrityksen käyttäjät + adminit pääsevät sisään + if ($domainCompanyId && $u['role'] !== 'admin' && !in_array($domainCompanyId, $userCompanies)) { + dbRecordLoginAttempt($ip); + http_response_code(403); + echo json_encode(['error' => 'Sinulla ei ole oikeutta kirjautua tälle sivustolle.']); + break; + } session_regenerate_id(true); $_SESSION['user_id'] = $u['id']; $_SESSION['username'] = $u['username']; $_SESSION['nimi'] = $u['nimi']; $_SESSION['role'] = $u['role']; - // Multi-company: aseta käyttäjän yritykset sessioon - $userCompanies = $u['companies'] ?? []; $_SESSION['companies'] = $userCompanies; - // Domain-pohjainen oletusyritys - $host = strtolower(explode(':', $_SERVER['HTTP_HOST'] ?? '')[0]); - $domainCompany = dbGetCompanyByDomain($host); - $domainCompanyId = $domainCompany ? $domainCompany['id'] : ''; // Jos domain matchaa ja käyttäjällä on oikeus -> käytä sitä if ($domainCompanyId && in_array($domainCompanyId, $userCompanies)) { $_SESSION['company_id'] = $domainCompanyId;