(DT) Bài viết này sẽ chỉ cho bạn một cách khác để triển khai quyền của người dùng trong ứng dụng của bạn. Phương pháp này sử dụng toán tử bitwise. Điều này có thể được thực hiện với cả PHP và Mysql. Sau đây tôi sẽ hướng dẫn cách thực hiện nó với Mysql.
>> See more:
Hướng dẫn cách viết đa ngôn ngữ trong ReactJS
Hướng dẫn tìm hiểu Unit Test và cách viết Unit Test cho UI
Dưới đây là bảng mẫu với một số dữ liệu mẫu:
Chuẩn bị dữ liệu
Bảng 1: Bảng phân quyền giúp lưu trữ tên quyền cùng với bit của nó như 1,2,4,8..vv (bội số của 2)
CREATE TABLE IF NOT EXISTS `permission` ( `bit` int(11) NOT NULL, `name` varchar(50) NOT NULL, PRIMARY KEY (`bit`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Bạn cần thêm một số dữ liệu mẫu vào bảng
INSERT INTO `permission` (`bit`, `name`) VALUES
(1, 'User-Add'),
(2, 'User-Edit'),
(4, 'User-Delete'),
(8, 'User-View'),
(16, 'Blog-Add'),
(32, 'Blog-Edit'),
(64, 'Blog-Delete'),
(128, 'Blog-View');
Bảng người dùng là để lưu trữ id, tên và vai trò của người dùng. Vai trò (role) sẽ được tính bằng tổng số bit của quyền.
Ví dụ: Nếu người dùng ‘Ketan’ có quyền ‘User-Add’ (bit=1) and ‘Blog-Delete’ (bit-64), vai trò (role) sẽ là 65 (1 + 64). Nếu người dùng ‘Mehata’ có quyền ‘Blog-View’ (bit = 128) và ‘User-Delete’ (bit-4), vai trò (role) sẽ là 132 (128 + 4).
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`role` int(11) NOT NULL,
`created_date` datetime NOT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB Â DEFAULT CHARSET=latin1;
INSERT INTO `user` (`id`, `name`, `role`, `created_date`)
VALUES (NULL, 'Ketan', '65', '2013-01-09 00:00:00'),
(NULL, 'Mehata', '132', '2013-01-09 00:00:00');
Tiến hành triển khai
Tải quyền của người dùng: Sau khi đăng nhập nếu muốn tải quyền của người dùng, chúng ta chỉ cần truy vấn như hình dưới đây để có được quyền:
SELECT permission.bit,permission.name FROM user LEFT JOIN permission ON user.role & permission.bit WHERE user.id = 1
Ở đây user.role “&” permission.bit là một toán tử Bitwise sẽ cung cấp cho chúng ta đầu ra là
User-Add - 1 Blog-Delete - 64
Nếu bạn muốn kiểm tra xem một người dùng cụ thể có quyền chỉnh sửa hay không, hãy sử dụng:
SELECT * FROM `user` WHERE role & (select bit from permission where name='user-edit')
Output = No rows thì có nghĩa là người dùng không có quyền chỉnh sửa
Dogoo Team hy vọng bài viết này sẽ giúp ích cho các bạn !!!! Đừng quên gửi lại cho chúng tôi phản hồi bên dưới nhé!
Dogoo Team