Tôi nghĩ toán tử bitwise là cách tốt nhất để triển khai quyền của người dùng. Ở đây tôi sẽ chỉ ra cách chúng ta có thể triển khai nó với MySQL.
Dưới đây là bảng mẫu với một số dữ liệu mẫu:
Bảng 1 :Bảng quyền để lưu trữ tên quyền cùng với nó bit như 1, 2, 4, 8 ..v.v (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;
Chèn 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 2 :Bảng người dùng để lưu id người dùng, tên và vai trò. Vai trò sẽ được tính bằng tổng các quyền.
Ví dụ:
Nếu người dùng 'Ketan' có quyền 'Thêm Người dùng' (bit =1) và 'Xóa Blog' (bit-64), thì vai trò sẽ là 65 (1 + 64).
Nếu người dùng 'Mehata' có quyền của 'Blog-View' (bit =128) và 'User-Delete' (bit-4) nên vai trò 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;
Dữ liệu mẫu-
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');
Quyền ghi mã của người dùng Sau khi đăng nhập, nếu chúng ta muốn tải quyền của người dùng thì chúng ta có thể truy vấn bên dưới để lấy quyền:
SELECT permission.bit,permission.name
FROM user LEFT JOIN permission ON user.role & permission.bit
WHERE user.id = 1
Ở đây user.role "&" allow.bit là một toán tử Bitwise sẽ đưa ra kết quả là -
User-Add - 1
Blog-Delete - 64
Nếu chúng tôi muốn kiểm tra thời tiết, một người dùng cụ thể có quyền chỉnh sửa của người dùng hay không-
SELECT * FROM `user`
WHERE role & (select bit from permission where name='user-edit')
Đầu ra =Không có hàng.
Bạn có thể xem thêm: http:// sforsuresh .in / implemention-of-user-allow-with-php-mysql-bitwise-operator /