auth.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. /**
  3. * Authentication Class
  4. * Handles user login, logout, and session management
  5. */
  6. class Auth {
  7. private $db;
  8. public function __construct() {
  9. $this->db = Database::getInstance();
  10. }
  11. public function login($username, $password) {
  12. $sql = "SELECT * FROM users WHERE username = ?";
  13. $user = $this->db->fetch($sql, [$username]);
  14. if ($user && password_verify($password, $user['password'])) {
  15. $_SESSION['user_id'] = $user['id'];
  16. $_SESSION['username'] = $user['username'];
  17. $_SESSION['role'] = $user['role'];
  18. $_SESSION['logged_in'] = true;
  19. return true;
  20. }
  21. return false;
  22. }
  23. public function logout() {
  24. session_destroy();
  25. unset($_SESSION);
  26. }
  27. public function isLoggedIn() {
  28. return isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true;
  29. }
  30. public function requireAuth() {
  31. if (!$this->isLoggedIn()) {
  32. header('Location: login.php');
  33. exit;
  34. }
  35. }
  36. public function getUser() {
  37. if ($this->isLoggedIn()) {
  38. return [
  39. 'id' => $_SESSION['user_id'],
  40. 'username' => $_SESSION['username'],
  41. 'role' => $_SESSION['role']
  42. ];
  43. }
  44. return null;
  45. }
  46. public function isAdmin() {
  47. return $this->isLoggedIn() && $_SESSION['role'] === 'admin';
  48. }
  49. }
  50. // Initialize session
  51. if (session_status() === PHP_SESSION_NONE) {
  52. session_start();
  53. }