Система многопользовательских учетных записей PHP: методы и примеры кода

  1. Подход с использованием единой таблицы базы данных.
    В этом методе все пользовательские данные хранятся в одной таблице базы данных. Каждому пользователю присваивается уникальный идентификатор, например имя пользователя или адрес электронной почты. Вот пример:
// Create users table
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE
);
// Register a new user
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
// Hash the password for security
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// Insert user data into the table
$sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$username, $hashedPassword, $email]);
  1. Подход с использованием отдельных таблиц пользователей и учетных записей.
    Этот метод предполагает создание отдельных таблиц для пользователей и учетных записей пользователей. В таблице пользователей хранится общая информация о пользователе, а в таблице учетных записей — данные, специфичные для учетной записи. Вот пример:
// Create users table
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE
);
// Create accounts table
CREATE TABLE accounts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    account_number VARCHAR(255) NOT NULL UNIQUE,
    balance DECIMAL(10, 2) DEFAULT 0,
    FOREIGN KEY (user_id) REFERENCES users(id)
);
// Register a new user and create an account
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$accountNumber = generateAccountNumber(); // Custom function to generate a unique account number
// Hash the password for security
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// Insert user data into the users table
$sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$username, $hashedPassword, $email]);
// Get the newly created user's ID
$userId = $pdo->lastInsertId();
// Insert account data into the accounts table
$sql = "INSERT INTO accounts (user_id, account_number) VALUES (?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId, $accountNumber]);
  1. Подход управления доступом на основе ролей (RBAC).
    Этот метод включает в себя назначение ролей пользователям и управление их разрешениями на основе этих ролей. Вот упрощенный пример:
// Create users table
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    role VARCHAR(255) NOT NULL DEFAULT 'user'
);
// Check user role for authorization
function isAuthorized($requiredRole) {
    // Get the currently logged-in user's role from the session or database
    $userRole = $_SESSION['user_role']; // Example
    // Compare the required role with the user's role
    return $userRole === $requiredRole;
}
// Usage example
if (isAuthorized('admin')) {
    // Perform admin-specific actions
} else {
    // Display an error or redirect unauthorized users
}