यह एक बिटमास्क है। यह इस प्रकार काम करता है: आप प्रत्येक भूमिका को एक प्रगतिशील संख्या निर्दिष्ट करते हैं, फिर जब आप किसी उपयोगकर्ता को एक भूमिका नियुक्त करना चाहते हैं, तो आप उस भूमिका की संख्या चुनते हैं। यदि आप एक और भूमिका जोड़ना चाहते हैं, तो आप उस मूल संख्या को मूल में जोड़ दें। आप जितनी चाहें उतनी भूमिकाएं जोड़ सकते हैं। एक उदाहरण वे 2.
यहाँ की शक्तियों रहे हैं: चाल बस कैसे आप अपने नंबर का चयन है
Role: Editor. Value: 2^0 = 1
Role: Manager. Value: 2^1 = 2
Role: Supervisor. Value: 2^2 = 4
Role: Admin. Value: 2^3 = 8
...
एक उपयोगकर्ता संपादक की भूमिका देने के लिए, आप डेटाबेस के लिए 1 बचाने के लिए, उपयोगकर्ता को संपादक, प्रबंधक और व्यवस्थापक की भूमिका देने के लिए आप 1 + 2 + 8 = 11
देख सकते हैं कि यह क्यों काम करता है, यदि आप इसे 1 या 0 मानों के सरणी के रूप में देखते हैं।
|__|__|__|__|__|__|
16 8 4 2 1
प्रत्येक भूमिका संबंधित स्लॉट में 1 है। इसलिए हमारे 11 मामला है:
(bitmask & role_value)> = 1
:
|__|__|_1|_0|_1|_1|
16 8 4 2 1
आप बिटमास्क है, और आप उपयोगकर्ता एक निश्चित भूमिका है कि क्या जानना चाहते हैं, तो आप इस आपरेशन का उपयोग
उदाहरण के लिए:
(11 & 8)> = 1? हां, तो उपयोगकर्ता के पास व्यवस्थापक भूमिका
(11 & 4)> = 1 है? नहीं, इसलिए उपयोगकर्ता पर्यवेक्षक भूमिका
इसे बिटमैस्क कहा जाता है, क्योंकि आप जो कर रहे हैं, यह जांचना है कि "किसी विशेष स्थिति में 1 है", यानी, "मास्क लागू करें जो मास्क करेगा (0 करने के लिए सेट) सभी स्थानों, एक आप खोज रहे हैं) को छोड़कर:
11 --> |__|__|_1|_0|_1|_1|
16 8 4 2 1
8 --> |__|__|_1|_0|_0|_0| (mask)
16 8 4 2 1
AND -> |__|__|_1|_0|_0|_0| Result: Yes
आशा है कि यह मदद की :)
मैं php के बारे में पता नहीं है, लेकिन यूनिक्स में, वे इसका इस्तेमाल करते हैं, है न यूनिक्स सिस्टम में कोई जवाब देना चाहते हैं? – vodkhang