Mysql
 sql >> база данни >  >> RDS >> Mysql

Разрешения за потребителска роля за различни модули, използващи побитови оператори

Тук показвам как можем да го приложим с Mysql.

По-долу има примерни таблици с някои примерни данни:

Таблица 1 :Таблица с разрешения за съхраняване на името на разрешението заедно с него малко като 1,2,4,8.. и т.н. (множество от 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;

Вмъкнете някои примерни данни в таблицата.

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

Таблица 2 :Таблица с потребители за съхраняване на потребителски идентификатор, име и роля. Ролята ще бъде изчислена като сума от разрешения.
Пример:
Ако потребител 'Ketan' има разрешение за 'User-Add' (bit=1) и 'Blog-Delete' (bit-64), така ролята ще бъде 65 (1+64).
Ако потребителят „Mehata“ има разрешение за „Blog-View“ (bit=128) и „User-Delete“ (bit-4), така ролята ще бъде 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;

Примерни данни-

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

Разрешение за зареждане на потребител след влизане, ако искаме да заредим потребителско разрешение, тогава можем да потърсим по-долу, за да получим разрешенията:

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

Тук user.role "&" permission.bit е побитов оператор, който ще даде изход като -

User-Add - 1
Blog-Delete - 64

Ако искаме да проверим дали конкретен потребител има разрешение за потребителско редактиране или не-

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

Изход =Няма редове.

Щракнете тук за повече информация.



  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 от Ubuntu

  2. mysql изтриване в безопасен режим

  3. mysql ДЕКЛАРИРАНЕ WHILE извън съхранената процедура как?

  4. Как да използвам GROUP BY за свързване на низове в mysql

  5. създайте mysql таблица, ако тя не съществува