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

Praktik Terbaik untuk Merancang Peran Pengguna dan Sistem Izin?

Saya pikir operator bitwise adalah cara terbaik untuk menerapkan izin pengguna. 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.. dll (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 data sampel 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 user 'Ketan' memiliki izin 'User-Add' (bit=1) dan 'Blog-Delete' (bit-64) maka role menjadi 65 (1+64).
Jika user 'Mehata' memiliki izin dari 'Blog-View' (bit=128) dan 'User-Delete' (bit-4) jadi 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');

Loding izin pengguna Setelah login jika kita ingin memuat izin pengguna maka kita bisa query 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 kami ingin memeriksa cuaca, 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.

Anda juga dapat melihat:http://sforsuresh .in/implemention-of-user-permission-with-php-mysql-bitwise-operators/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL REGEXP menelusuri dalam string JSON

  2. PHP PDOException:SQLSTATE[HY093]:Nomor parameter tidak valid

  3. Bagaimana Benchmark Kinerja MySQL Menggunakan SysBench

  4. Backup database MySQL dengan CodeIgniter

  5. bagaimana memahami tidak dapat menghubungkan pesan kesalahan mysql?