Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Izin peran pengguna untuk modul yang berbeda menggunakan operator bitwise

Di sini saya menunjukkan bagaimana kita dapat mengimplementasikannya dengan Mysql.

Di bawah ini adalah tabel sampel dengan beberapa data sampel:

Tabel 1 :Tabel izin untuk menyimpan nama izin beserta bitnya seperti 1,2,4,8..etc (kelipatan 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;

Masukkan beberapa contoh data ke dalam tabel.

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');

Tabel 2 :Tabel pengguna untuk menyimpan id, nama, dan peran pengguna. Peran akan dihitung sebagai jumlah izin.
Contoh:
Jika pengguna 'Ketan' memiliki izin 'Tambah Pengguna' (bit=1) dan 'Hapus Blog' (bit-64) maka peran akan menjadi 65 (1+64).
Jika pengguna 'Mehata' memiliki izin 'Blog-View' (bit=128) dan 'User-Delete' (bit-4) maka peran akan menjadi 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;

Contoh data-

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');

Memasukkan izin pengguna Setelah login jika kita ingin memuat izin pengguna, kita dapat menanyakan di bawah ini untuk mendapatkan izin:

SELECT permission.bit,permission.name  
   FROM user LEFT JOIN permission ON user.role & permission.bit
 WHERE user.id = 1

Di sini user.role "&" permission.bit adalah operator Bitwise yang akan memberikan output sebagai -

User-Add - 1
Blog-Delete - 64

Jika kita ingin memeriksa apakah pengguna tertentu memiliki izin edit pengguna atau tidak-

  SELECT * FROM `user` 
     WHERE role & (select bit from permission where name='user-edit')

Keluaran =Tidak ada baris.

Klik di sini untuk informasi lebih lanjut.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara mendapatkan kembali UUID Java yang disimpan di DB sebagai biner

  2. BUAT JENIS di MySQL

  3. Konversikan skrip MS SQL ke Mysql dan Oracle

  4. Laravel kiriBergabung hanya catatan terakhir dari tabel kanan

  5. Prosedur tersimpan menyebabkan Perintah tidak sinkron pada kueri berikutnya