Fix company access: sync session from users.json on every check_auth
- check_auth always reads fresh company permissions from users.json - user_update updates session immediately when editing own permissions - Prevents stale session showing tickets from companies user lost access to Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
19
api.php
19
api.php
@@ -1059,19 +1059,18 @@ switch ($action) {
|
|||||||
|
|
||||||
case 'check_auth':
|
case 'check_auth':
|
||||||
if (isset($_SESSION['user_id'])) {
|
if (isset($_SESSION['user_id'])) {
|
||||||
// Fallback: jos session ei sisällä company-dataa (vanha sessio ennen migraatiota)
|
// Synkronoi aina tuoreet yritysoikeudet users.json:sta sessioon
|
||||||
if (empty($_SESSION['companies'])) {
|
|
||||||
$users = loadUsers();
|
$users = loadUsers();
|
||||||
foreach ($users as $u) {
|
foreach ($users as $u) {
|
||||||
if ($u['id'] === $_SESSION['user_id']) {
|
if ($u['id'] === $_SESSION['user_id']) {
|
||||||
$_SESSION['companies'] = $u['companies'] ?? [];
|
$_SESSION['companies'] = $u['companies'] ?? [];
|
||||||
if (!empty($u['companies'])) {
|
// Varmista aktiivinen yritys on sallittu
|
||||||
$_SESSION['company_id'] = $u['companies'][0];
|
if (!in_array($_SESSION['company_id'] ?? '', $_SESSION['companies'])) {
|
||||||
|
$_SESSION['company_id'] = !empty($_SESSION['companies']) ? $_SESSION['companies'][0] : '';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// Hae yritysten nimet
|
// Hae yritysten nimet
|
||||||
$userCompanyIds = $_SESSION['companies'] ?? [];
|
$userCompanyIds = $_SESSION['companies'] ?? [];
|
||||||
$allCompanies = loadCompanies();
|
$allCompanies = loadCompanies();
|
||||||
@@ -1245,6 +1244,16 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
$found = true;
|
$found = true;
|
||||||
addLog('user_update', '', '', "Muokkasi käyttäjää: {$u['username']}");
|
addLog('user_update', '', '', "Muokkasi käyttäjää: {$u['username']}");
|
||||||
|
// Päivitä sessio jos muokattiin kirjautunutta käyttäjää
|
||||||
|
if ($u['id'] === $_SESSION['user_id']) {
|
||||||
|
$_SESSION['companies'] = $u['companies'] ?? [];
|
||||||
|
if (!empty($u['companies']) && !in_array($_SESSION['company_id'] ?? '', $u['companies'])) {
|
||||||
|
$_SESSION['company_id'] = $u['companies'][0];
|
||||||
|
}
|
||||||
|
if (empty($u['companies'])) {
|
||||||
|
$_SESSION['company_id'] = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
$safe = $u;
|
$safe = $u;
|
||||||
unset($safe['password_hash']);
|
unset($safe['password_hash']);
|
||||||
echo json_encode($safe);
|
echo json_encode($safe);
|
||||||
|
|||||||
Reference in New Issue
Block a user