यहां मैं दिखा रहा हूं कि हम इसे मैसकल के साथ कैसे कार्यान्वित कर सकते हैं।
नीचे कुछ नमूना डेटा के साथ एक नमूना तालिका है:
तालिका 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')
आउटपुट =कोई पंक्तियाँ नहीं।
यहां क्लिक करें अधिक जानकारी के लिए।