আমি মনে করি বিটওয়াইজ অপারেটর ব্যবহারকারীর অনুমতি কার্যকর করার সেরা উপায়। এখানে আমি দেখিয়ে দিচ্ছি যে আমরা কীভাবে এটি মাইএসকিএল দিয়ে প্রয়োগ করতে পারি।
নীচে কয়েকটি নমুনা ডেটা সহ একটি নমুনা টেবিল রয়েছে:
সারণী 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 : ব্যবহারকারীর আইডি, নাম এবং ভূমিকা রাখতে ব্যবহারকারী সারণী table ভূমিকার অনুমতি হিসাবে যোগফল হিসাবে গণনা করা হবে।
উদাহরণ:
যদি ব্যবহারকারী 'কেতন' এর সাথে 'ব্যবহারকারী-যোগ' (বিট = 1) এবং 'ব্লগ-মুছুন' (বিট -৪)) অনুমতি থাকে তবে ভূমিকাটি 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-Add - 1
Blog-Delete - 64
আমরা যদি আবহাওয়া পরীক্ষা করতে চাই তবে নির্দিষ্ট ব্যবহারকারীর ব্যবহারকারীর সম্পাদনার অনুমতি আছে বা না-
SELECT * FROM `user`
WHERE role & (select bit from permission where name='user-edit')
আউটপুট = কোনও সারি নেই।
আপনি আরও দেখতে পারেন: http://goo.gl/ATnj6j