Tôi nghĩ toán tử bitwise là cách tốt nhất để thực hiện quyền của người dùng. Ở đây tôi cho thấy cách chúng ta có thể thực hiện 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: Permission bảng để tên cửa hàng cho phép cùng với nó cắn như 1,2,4,8..etc (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 tài khoản để lưu trữ sử dụng id, tên và vai trò. Vai trò sẽ được tính là tổng số quyền.
Ví dụ:
Nếu người dùng 'Ketan' có quyền 'Thêm người dùng' (bit = 1) và 'Blog-Delete' (bit-64) thì vai trò sẽ là 65 (1 + 64).
Nếu người dùng 'Mehata' có quyền 'Blog-View' (bit = 128) và 'User-Delete' (bit-4) thì 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;
mẫu đĩa dữ liệ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');
loding cho phép của người dùng Sau khi đăng nhập, nếu chúng ta muốn tải cho phép người sử dụng hơn chúng ta có thể truy vấn dưới đây để có được các điều khoản:
SELECT permission.bit,permission.name
FROM user LEFT JOIN permission ON user.role & permission.bit
WHERE user.id = 1
Ở đây người dùng .role "&" permission.bit là một toán tử Bitwise sẽ cung cấp đầu ra là -
User-Add - 1
Blog-Delete - 64
Nếu chúng ta muốn kiểm tra thời tiết một người dùng cụ thể có người dùng chỉnh sửa cho phép hay không-
SELECT * FROM `user`
WHERE role & (select bit from permission where name='user-edit')
Output = Không có hàng.
Bạn cũng có thể xem: http://goo.gl/ATnj6j
Tuyệt vời. Cảm ơn các bạn rất nhiều. –
+1 Ví dụ tuyệt vời. Tôi nghĩ rằng bài đăng này sẽ được tham chiếu bởi nhiều người dùng đang tìm kiếm loại thông tin này. –
Cảm ơn @Mark, trợ giúp tuyệt vời. Bây giờ, nói rằng tôi có một vai trò thiết kế đồ họa và anh ta không có quyền xem hồ sơ anyones nhưng của riêng mình. Tôi đã chỉ định cho anh ta một người dùng để chăm sóc và anh ấy cần quyền truy cập vào hồ sơ của người dùng. Làm thế nào tôi có thể lưu trữ trong Cơ sở dữ liệu mà anh ta có quyền xem bất kỳ hồ sơ nào mà anh ta đã được chỉ định? –