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 :यूजर आईडी, नाम और भूमिका को स्टोर करने के लिए यूजर टेबल। भूमिका की गणना अनुमतियों के योग के रूप में की जाएगी।
उदाहरण:

यदि उपयोगकर्ता 'केतन' को 'उपयोगकर्ता-जोड़' (बिट =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')

आउटपुट =कोई पंक्तियाँ नहीं।

आप यह भी देख सकते हैं: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. आईडी द्वारा मेरी PHP तालिका को संपादित/संशोधित करने के लिए प्रतीत नहीं होता है

  2. मैं एक MySQL टेबल पर कस्टम चेक बाधा कैसे जोड़ूं?

  3. XAMPP - त्रुटि:MySQL अप्रत्याशित रूप से बंद हो गया

  4. हिम तेंदुआ + रूबी 1.9.1 + माईएसक्यूएल जेम =बड़ी समस्या

  5. एक MySQL डेटाबेस में एक PHP सरणी की सामग्री संग्रहीत करना