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

Thực hành tốt nhất để thiết kế vai trò người dùng và hệ thống quyền?

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 /



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các ký tự đặc biệt trong PHP / MySQL

  2. Chỉ chọn bản ghi nếu bản ghi trước nó có giá trị thấp hơn

  3. Trường ORDER BY ENUM trong MYSQL

  4. docker mysql trên cổng khác

  5. Mã hóa Spring Data jpa utf-8 không hoạt động