Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Quyền vai trò người dùng cho các mô-đun khác nhau bằng cách sử dụng toán tử bitwise

Ở đây, tôi sẽ chỉ cho bạn 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 giống 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;

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à 'Blog-Xóa' (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;

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ùngSau khi đăng nhập, nếu chúng ta muốn tải quyền của người dùng hơn, 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 xem 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.

Nhấp vào đây để biết thêm thông tin.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tạo cơ sở dữ liệu MySQL từ tệp kết xuất trong tập lệnh Mong đợi / TCL?

  2. MySQL:sự khác biệt của hai tập kết quả

  3. bảng cập nhật mysql ajax theo lớp

  4. có một lựa chọn thực hiện 10 truy vấn trong học thuyết (Symfony)

  5. PHP PDO:bộ ký tự, đặt tên?