What are some best practices for handling user authentication and access levels in PHP applications?

Issue: User authentication and access levels are crucial aspects of PHP applications to ensure secure access to different parts of the application based on user roles. Code snippet:

// Start a session to store user authentication information
session_start();

// Check if the user is logged in
if(!isset($_SESSION['user_id'])) {
    // Redirect to login page if not logged in
    header("Location: login.php");
    exit();
}

// Check user access level before granting access
if($_SESSION['access_level'] != 'admin') {
    // Redirect to unauthorized page if access level is not admin
    header("Location: unauthorized.php");
    exit();
}