Роли пользователей — админ и обычный
25 минЗачем нужны роли?
Сейчас все пользователи равны. Но в реальном блоге нужны разные уровни доступа:
- Гость — может только читать
- Пользователь — может создавать и редактировать свои посты
- Админ — может всё: редактировать чужие посты, удалять пользователей, управлять сайтом
Шаг 1: Добавляем поле role в базу
Откройте phpMyAdmin (localhost:8081), выберите базу blog, таблицу users.
Перейдите во вкладку "SQL" и выполните:
ALTER TABLE users ADD COLUMN role VARCHAR(20) DEFAULT "user" AFTER password;
Теперь у каждого пользователя есть поле role. По умолчанию — "user".
Шаг 2: Делаем первого админа
Выполните SQL:
UPDATE users SET role = "admin" WHERE username = "admin";
Теперь пользователь admin — администратор.
Шаг 3: Функции проверки роли
Добавьте в includes/helpers.php:
/**
* Проверить, является ли пользователь админом
*/
function isAdmin(): bool {
if (!isLoggedIn()) {
return false;
}
return isset($_SESSION["role"]) && $_SESSION["role"] === "admin";
}
/**
* Требовать права админа
*/
function requireAdmin(): void {
requireLogin();
if (!isAdmin()) {
header("HTTP/1.0 403 Forbidden");
echo "<h1>Доступ запрещён</h1>";
echo "<p>Эта страница доступна только администраторам.</p>";
exit;
}
}
Шаг 4: Сохраняем роль в сессии
Обновите login.php — при входе сохраняем роль:
// В блоке успешного входа:
$_SESSION["user_id"] = $user["id"];
$_SESSION["username"] = $user["username"];
$_SESSION["role"] = $user["role"]; // Добавляем эту строку
Шаг 5: Обновляем права на редактирование
Обновите функцию isPostAuthor в helpers.php:
/**
* Проверить, может ли пользователь редактировать пост
* (автор или админ)
*/
function canEditPost(int $postUserId): bool {
if (!isLoggedIn()) {
return false;
}
// Админ может редактировать всё
if (isAdmin()) {
return true;
}
// Автор может редактировать свой пост
return getCurrentUserId() === $postUserId;
}
И обновите проверки в edit_post.php и delete_post.php:
// Было:
if (!isPostAuthor($post["user_id"])) {
// Стало:
if (!canEditPost($post["user_id"])) {
Шаг 6: Показываем статус в шапке
В header.php:
<?php if (isLoggedIn()): ?>
<?php if (isAdmin()): ?>
<a href="admin/" style="color: #ffc107; margin-right: 15px;">Админка</a>
<?php endif; ?>
Привет, <?= escape(getCurrentUsername()) ?>
<?php if (isAdmin()): ?>
<span style="color: #ffc107;">(админ)</span>
<?php endif; ?>
<?php endif; ?>
Проверяем
- Выйдите и войдите заново под admin
- В шапке должно появиться "(админ)" и ссылка на админку
- Админ может редактировать чужие посты
В следующем уроке создадим админ-панель.
Материалы по теме
- Глоссарий digital-терминов Глоссарий
- Статьи блога по разработке и SEO Блог
- Практические чеклисты по внедрению Чеклисты