2010-05-11 12 views
11

मैंने एक बार लेखों को प्रबंधित करने के लिए एक विशिष्ट प्रकार की संख्या प्रणाली का उपयोग करने के बारे में एक लेख देखा। उपयोगकर्ता को एक विशिष्ट भूमिका संख्या सौंपी जाएगी और गणना के आधार पर, संख्या कई भूमिकाओं के लिए खड़ी हो सकती है।PHP: गणित के साथ भूमिकाएं प्रबंधित करें?

किसी को भी मेरे साथ इस तकनीक साझा करने या एक लिंक साझा कर सकते हैं? धन्यवाद!

+0

मैं php के बारे में पता नहीं है, लेकिन यूनिक्स में, वे इसका इस्तेमाल करते हैं, है न यूनिक्स सिस्टम में कोई जवाब देना चाहते हैं? – vodkhang

उत्तर

20

यह एक बिटमास्क है। यह इस प्रकार काम करता है: आप प्रत्येक भूमिका को एक प्रगतिशील संख्या निर्दिष्ट करते हैं, फिर जब आप किसी उपयोगकर्ता को एक भूमिका नियुक्त करना चाहते हैं, तो आप उस भूमिका की संख्या चुनते हैं। यदि आप एक और भूमिका जोड़ना चाहते हैं, तो आप उस मूल संख्या को मूल में जोड़ दें। आप जितनी चाहें उतनी भूमिकाएं जोड़ सकते हैं। एक उदाहरण वे 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 

आशा है कि यह मदद की :)

+0

धन्यवाद! यही वह है जिसकी तलाश में मैं हूं। उपयोगकर्ताओं को इस तरह प्रबंधित करना इतना आसान है !! –

+1

वास्तव में अच्छा जवाब! –

3

मुझे लगता है कि आपने "बिट-झंडे" के बारे में सुना है। मैं इसके लिए एक अच्छा अंग्रेजी टूरियल नहीं जानता (मैं जर्मन हूं) - लेकिन मुझे लगता है कि Google आपको कुछ अच्छे लिंक देगा।

+0

मुझे लगता है कि ओपी क्या ढूंढ रहा था इसका जवाब है। –

+0

आपकी मदद के लिए धन्यवाद। जाहिर है, मैं "बिट-मास्क" के बारे में पूछ रहा था, क्योंकि @Palantir के पास है का वर्णन किया। –

संबंधित मुद्दे