Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uprawnienia ról użytkownika dla różnych modułów przy użyciu operatorów bitowych

Tutaj pokazuję, jak możemy to zaimplementować za pomocą Mysql.

Poniżej znajdują się przykładowe tabele z przykładowymi danymi:

Tabela 1 :Tablica uprawnień do przechowywania nazwy uprawnień wraz z nią trochę jak 1,2,4,8..etc (wielokrotność 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;

Wstaw kilka przykładowych danych do tabeli.

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

Tabela 2 :Tabela użytkownika do przechowywania identyfikatora użytkownika, nazwy i roli. Rola zostanie obliczona jako suma uprawnień.
Przykład :
Jeśli użytkownik 'Ketan' ma uprawnienia 'User-Add' (bit=1) i 'Blog-Delete' (bit-64), więc rola będzie 65 (1+64).
Jeśli użytkownik 'Mehata' ma uprawnienia 'Blog-View' (bit=128) i 'User-Delete' (bit-4), więc rola będzie wynosić 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;

Przykładowe dane-

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

Wstawianie uprawnień użytkownikaPo zalogowaniu, jeśli chcemy załadować uprawnienia użytkownika, możemy zapytać poniżej, aby uzyskać uprawnienia:

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

Tutaj user.role "&" permission.bit to operator bitowy, który da wynik jako -

User-Add - 1
Blog-Delete - 64

Jeśli chcemy sprawdzić, czy określony użytkownik ma uprawnienia do edycji przez użytkownika, czy nie-

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

Wyjście =Brak wierszy.

Kliknij tutaj aby uzyskać więcej informacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd w przygotowanym oświadczeniu

  2. Nie można pobrać danych mysql (wybór CodeIgniter)

  3. MySQL w Dockerze zwraca Serwer zażądał metody uwierzytelnienia nieznanej klientowi

  4. MySQL - Jak podzielić wartości na pojedyncze ciągi za pomocą przecinka

  5. Problem z zapytaniem o dane w tabeli