Việc phân quyền người dùng là một phần không thể thiếu trong các ứng dụng web hiện đại. Phân biệt giữa user và admin giúp bảo vệ các chức năng quan trọng, kiểm soát truy cập và đảm bảo hệ thống vận hành đúng vai trò của từng người dùng. Mô hình phân quyền phổ biến nhất là Role-Based Access Control (RBAC), cho phép mỗi tài khoản được gán một vai trò cụ thể và xử lý logic dựa trên vai trò đó.
Nếu bạn chưa xây dựng hệ thống đăng nhập hoặc kết nối cơ sở dữ liệu, hãy tham khảo trước bài Hướng dẫn tạo form đăng nhập có validate trong PHP thuần và bài Kết nối MySQL bằng PDO trong PHP và xử lý lỗi kết nối. Đây là nền tảng cần thiết để triển khai phân quyền chính xác và an toàn.
Cơ chế phân quyền dựa trên vai trò
Role-Based Access Control là gì?
Role-Based Access Control (RBAC) là mô hình phân quyền mà mỗi người dùng được gán một vai trò cụ thể, ví dụ như admin, user, editor,… Mỗi vai trò sẽ có những quyền hạn riêng biệt và được hệ thống kiểm tra trước khi cho phép thực hiện các hành động.
Ví dụ: admin có thể truy cập trang quản lý người dùng, chỉnh sửa dữ liệu, trong khi user chỉ được xem thông tin cơ bản. Việc tách biệt quyền này giúp đảm bảo bảo mật và tránh các lỗi logic trong hệ thống.
Lợi ích khi áp dụng phân quyền từ sớm
Việc áp dụng phân quyền ngay từ đầu mang lại nhiều lợi ích:
-
Bảo mật: Giảm rủi ro người dùng truy cập trái phép vào dữ liệu nhạy cảm.
-
Mở rộng dễ dàng: Dễ bổ sung các vai trò mới mà không cần viết lại nhiều mã.
-
Tối ưu bảo trì: Hệ thống rõ ràng, dễ kiểm tra, dễ debug.
Thiết kế cơ sở dữ liệu cho phân quyền
Thêm cột role vào bảng users
Bước đầu tiên để phân quyền là cần có một trường thể hiện vai trò người dùng trong bảng users. Trường role có thể là kiểu VARCHAR, hoặc ENUM nếu bạn muốn giới hạn giá trị ở mức SQL.
Dưới đây là câu lệnh SQL tạo bảng users với phân quyền cơ bản:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('user', 'admin') NOT NULL DEFAULT 'user'
);
Thêm dữ liệu mẫu để kiểm thử
Bạn nên tạo sẵn một số tài khoản mẫu cho vai trò user và admin. Mật khẩu nên được mã hóa bằng password_hash() trong PHP:
INSERT INTO users (username, password, role) VALUES
('admin1', '$2y$10$abcd...efgh', 'admin'),
('user1', '$2y$10$ijkl...mnop', 'user');
Tạo form đăng nhập và xử lý phân quyền
Form đăng nhập cơ bản
Form đăng nhập bao gồm hai trường: username và password. Dữ liệu từ form sẽ được gửi đến file xử lý đăng nhập để kiểm tra tính hợp lệ và phân quyền dựa trên vai trò người dùng.
Dưới đây là ví dụ form đơn giản:

