[admin] Ochrana prvního uživatele před smazáním, odkaz na admin v $auth_logout_html

This commit is contained in:
stepan
2026-03-18 12:39:35 +01:00
parent 40289394d2
commit d26f66f9a8
+23 -1
View File
@@ -174,10 +174,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$chyba = 'Neplatné ID uživatele.'; $chyba = 'Neplatné ID uživatele.';
} elseif ($uzivatel_id === (int) $auth_uzivatel['id']) { } elseif ($uzivatel_id === (int) $auth_uzivatel['id']) {
$chyba = 'Nemůžeš smazat svůj vlastní účet.'; $chyba = 'Nemůžeš smazat svůj vlastní účet.';
} elseif ($uzivatel_id === 1) {
// Uživatel s id=1 je první admin vytvořený při instalaci
// jeho smazání by mohlo zanechat systém bez správce
$chyba = 'Prvního uživatele systému nelze smazat.';
} }
if (empty($chyba)) { if (empty($chyba)) {
try { try {
// Díky FOREIGN KEY s ON DELETE CASCADE se automaticky
// smažou i záznamy v navázaných tabulkách
$stmt = $pdo->prepare(" $stmt = $pdo->prepare("
DELETE FROM `" . DB_TABULKA_UZIVATELE . "` DELETE FROM `" . DB_TABULKA_UZIVATELE . "`
WHERE `id` = :id WHERE `id` = :id
@@ -284,6 +290,7 @@ try {
<td><?php echo $u['admin'] ? 'ANO' : 'ne'; ?></td> <td><?php echo $u['admin'] ? 'ANO' : 'ne'; ?></td>
<td><?php echo htmlspecialchars($u['vytvoreno']); ?></td> <td><?php echo htmlspecialchars($u['vytvoreno']); ?></td>
<td> <td>
<!-- Formulář pro změnu hesla -->
<form method="POST" action="" style="display:inline;"> <form method="POST" action="" style="display:inline;">
<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf_token); ?>"> <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf_token); ?>">
<input type="hidden" name="akce" value="zmena_hesla"> <input type="hidden" name="akce" value="zmena_hesla">
@@ -293,7 +300,14 @@ try {
<button type="submit">Změnit heslo</button> <button type="submit">Změnit heslo</button>
</form> </form>
&nbsp; &nbsp;
<?php if ($u['id'] !== $auth_uzivatel['id']): ?> <?php
// Tlačítko Smazat se nezobrazí pokud:
// - jde o samotného přihlášeného admina
// - jde o prvního uživatele systému (id = 1)
$nelze_smazat = ($u['id'] === $auth_uzivatel['id'])
|| ((int) $u['id'] === 1);
if (!$nelze_smazat):
?>
<form method="POST" action="" style="display:inline;" <form method="POST" action="" style="display:inline;"
onsubmit="return confirm('Opravdu smazat uživatele <?php echo htmlspecialchars(addslashes($u['email'])); ?>? Tato akce je nevratná.');"> onsubmit="return confirm('Opravdu smazat uživatele <?php echo htmlspecialchars(addslashes($u['email'])); ?>? Tato akce je nevratná.');">
<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf_token); ?>"> <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($csrf_token); ?>">
@@ -301,6 +315,13 @@ try {
<input type="hidden" name="uzivatel_id" value="<?php echo htmlspecialchars($u['id']); ?>"> <input type="hidden" name="uzivatel_id" value="<?php echo htmlspecialchars($u['id']); ?>">
<button type="submit">Smazat</button> <button type="submit">Smazat</button>
</form> </form>
<?php else: ?>
<!-- Vysvětlení proč nelze smazat -->
<?php if ((int) $u['id'] === 1): ?>
<em>(první uživatel systému nelze smazat)</em>
<?php else: ?>
<em>(vlastní účet nelze smazat)</em>
<?php endif; ?>
<?php endif; ?> <?php endif; ?>
</td> </td>
</tr> </tr>
@@ -381,6 +402,7 @@ try {
<tr><td>PROJEKT_URL</td><td><?php echo htmlspecialchars(PROJEKT_URL); ?></td></tr> <tr><td>PROJEKT_URL</td><td><?php echo htmlspecialchars(PROJEKT_URL); ?></td></tr>
<tr><td>AUTH_LOGIN_URL</td><td><?php echo htmlspecialchars(AUTH_LOGIN_URL); ?></td></tr> <tr><td>AUTH_LOGIN_URL</td><td><?php echo htmlspecialchars(AUTH_LOGIN_URL); ?></td></tr>
<tr><td>AUTH_LOGOUT_URL</td><td><?php echo htmlspecialchars(AUTH_LOGOUT_URL); ?></td></tr> <tr><td>AUTH_LOGOUT_URL</td><td><?php echo htmlspecialchars(AUTH_LOGOUT_URL); ?></td></tr>
<tr><td>AUTH_ADMIN_URL</td><td><?php echo htmlspecialchars(AUTH_ADMIN_URL); ?></td></tr>
<tr><td>AUTH_REGISTRACE_URL</td><td><?php echo htmlspecialchars(AUTH_REGISTRACE_URL); ?></td></tr> <tr><td>AUTH_REGISTRACE_URL</td><td><?php echo htmlspecialchars(AUTH_REGISTRACE_URL); ?></td></tr>
<tr><td>AUTH_RESET_URL</td><td><?php echo htmlspecialchars(AUTH_RESET_URL); ?></td></tr> <tr><td>AUTH_RESET_URL</td><td><?php echo htmlspecialchars(AUTH_RESET_URL); ?></td></tr>
<tr><td>AUTH_REDIRECT_PO_PRIHLASENI</td><td><?php echo htmlspecialchars(AUTH_REDIRECT_PO_PRIHLASENI); ?></td></tr> <tr><td>AUTH_REDIRECT_PO_PRIHLASENI</td><td><?php echo htmlspecialchars(AUTH_REDIRECT_PO_PRIHLASENI); ?></td></tr>