Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

बिटवाइज़ ऑपरेटरों का उपयोग करके विभिन्न मॉड्यूल के लिए उपयोगकर्ता भूमिका अनुमतियाँ

यहां मैं दिखा रहा हूं कि हम इसे मैसकल के साथ कैसे कार्यान्वित कर सकते हैं।

नीचे कुछ नमूना डेटा के साथ एक नमूना तालिका है:

तालिका 1 :अनुमति तालिका 1,2,4,8..etc जैसे अनुमति नाम को स्टोर करने के लिए (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 :यूजर आईडी, नाम और भूमिका को स्टोर करने के लिए यूजर टेबल। भूमिका की गणना अनुमतियों के योग के रूप में की जाएगी।
उदाहरण:
यदि उपयोगकर्ता 'केतन' को 'उपयोगकर्ता-जोड़ें' (बिट =1) और 'ब्लॉग-हटाएं' (बिट -64) की अनुमति है तो भूमिका 65 (1+64) होगा।
यदि उपयोगकर्ता 'मेहता' को 'ब्लॉग-व्यू' (बिट =128) और 'उपयोगकर्ता-हटाएं' (बिट -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 "&" allow.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. क्या मैं साझा होस्टिंग पर ft_min_word_len बदल सकता हूँ?

  2. MYSQL, मैक्स, ग्रुप बाय और मैक्स

  3. एकाधिक तालिकाओं से संबंधित पोस्ट खोजने के लिए MySQL क्वेरी कैसे बनाएं?

  4. Node.js MYSQL किसी क्वेरी की INSERT/UPDATE पूर्णता का पता लगाने के लिए?

  5. PHP फ़ंक्शन में SQL क्वेरी डालना