2011-01-11 12 views
5

के लिए उपयोगकर्ता अनुमतियों को कैसे व्यवस्थित करें मैं एक कस्टम फोटोग्राफी सीएमएस सिस्टम बना रहा हूं और उपयोगकर्ता प्रमाणीकरण और अनुमति प्रणाली को लागू करने की आवश्यकता है। इस तरह के स्कीमा बनाने के लिए उद्योग में सामान्य प्रथाएं क्या हैं।सीएमएस

असल में मुझे उपयोगकर्ताओं की आवश्यकता है, और उपयोगकर्ता विभिन्न प्रकार के हो सकते हैं। कुछ उपयोगकर्ता कहते हैं कि केवल गैलरी बना सकते हैं, अन्य केवल उन्हें संपादित कर सकते हैं, या केवल कुछ दीर्घाओं को संपादित कर सकते हैं, तो इसे कैसे संरचित किया जाना चाहिए। मैं MySQL डेटाबेस का उपयोग कर रहा हूं और मैं सीएमएस को कोड करने के लिए PHP का उपयोग कर रहा हूं।

मैंने Google को देखने की कोशिश की, हालांकि केवल आलेख पाए गए जो वास्तविक MySQL डेटाबेस के लिए उपयोगकर्ताओं को बनाने का तरीका बताते हैं। मैं एक लेख के लिंक की सराहना करता हूं जो बताता है कि इस तरह की चीजें कैसे की जानी चाहिए।

अग्रिम धन्यवाद।

+0

पीयर लाइव_उसर में देखें। यह पुराना है और कभी मानक नहीं बनता है, लेकिन यह अधिकांश अनुमतियों को माइक्रोमैनेजमेंट को संभालता है। – mario

उत्तर

5

इस समस्या के दो आम दृष्टिकोण हैं, दोनों में स्वीकार्य संचालन को अलग-अलग कुछ अलग करने में शामिल करना शामिल है जिसे आप नाम दे सकते हैं। (पोस्ट हटाएं, गैलरी बनाएं, कोड को अपग्रेड करें, डेटाबेस को डंप करें, मिसाइल लॉन्च करें, गेराज दरवाजा खोलें।) इनमें से प्रत्येक को बिटवेक्टर में बिटमैप दें (यदि आप 32 से कम अनुमतियों का इरादा रखते हैं, तो यह अच्छा है और कॉम्पैक्ट स्टोरेज तंत्र; यदि आपको लगता है कि यह 32 अनुमतियों से अधिक हो जाएगा, एक सामान्य पूर्णांक का आकार, तो शायद आपके डेटाबेस में एक तालिका ..)

तो, आप या तो उपयोगकर्ताओं को सीधे अनुमतियों के लिए मानचित्र कर सकते हैं ("I gallery_createsarnold को देना चाहते हैं ") या आप उन की कक्षाओं के माध्यम से उपयोगकर्ता और अनुमतियां मैप कर सकते हैं (" मैं art_curator वर्ग के सभी सदस्यों को gallery_create देना चाहते हैं, तो मैं "art_curator को docent से उपयोगकर्ता sarnold बढ़ावा देने के लिए) चाहते हैं।

यदि आप उपयोगकर्ताओं को सीधे अनुमतियों के लिए मानचित्र बनाते हैं, तो आपको बाद में तैनाती में अजीब अनुमतियों का एक हॉज-पॉज मिल सकता है। यदि आप कक्षाओं में उपयोगकर्ताओं को मैप करते हैं, तो आप स्वयं को उपयोगकर्ताओं के कृत्रिम वर्गों के साथ पा सकते हैं क्योंकि आपने विशेषाधिकार वाले एक विशिष्ट व्यक्ति पर भरोसा किया है, लेकिन अन्य विशेषाधिकार नहीं हैं।

इस मैपिंग को संबोधित करने का सबसे अच्छा तरीका अभी भी एक खुली समस्या है; मैंने विभिन्न प्रकार के अनुमति मॉडल Modelling a permissions system के बारे में लिखा है जो कि आपके सिस्टम को कितना जटिल बनाना चाहते हैं, इस पर निर्भर करता है कि बहुत अधिक जानकारी हो सकती है या बहुत कम हो सकती है।

आप बिटमैप्स में सिर्फ दुकान अनुमतियाँ (जैसे, CAP_SYS_ADMIN के लिए CAPABLE() के लिनक्स कर्नेल के कार्यान्वयन, CAP_DAC_OVERRIDE, और आगे) तो आप नए विशेषाधिकारों के साथ जोड़ सकते हैं करना चाहते हैं तो बहुत ही सरल कुछ:

if (requested_new_permission == "CAP_SYS_ADMIN") 
    user->permissions |= CAP_SYS_ADMIN; 
else if (requested_new_permissions == "CAP_DAC_OVERRIDE") 
    user->permissions |= CAP_DAC_OVERRIDE; 

...

फिर जब आप क्षमताओं का परीक्षण करने की जरूरत है:

if (CAPABLE(user, CAP_SYS_ADMIN)) 
    reboot_server(); 

और मैक्रो CAPABLE() देख सकते हैं जैसे:

#define सक्षम (उपयोगकर्ता, टोपी) ((उपयोगकर्ता) -> अनुमतियाँ & (टोपी))

(php सी माफ कर दो, मैं सिर्फ पता नहीं है बहुत अच्छी तरह से; मुझे खुद को सीखना चाहते हैं कि बहुत से php कीड़े को ठीक करने के लिए मजबूर किया गया है।एक users मेज, एक groups या classes मेज, और एक permissions तालिका:)

आप उपयोगकर्ता कक्षाओं के माध्यम से अनुमति के उपयोगकर्ताओं मैप करना चाहते हैं, तो यह तीन टेबल हो सकता है। classes में user_id और permission_id के लिए कॉलम हैं। जब आपको यह जांचने की आवश्यकता होती है कि अनुमति दी जा सकती है, तो उपयोगकर्ता की कक्षा का चयन करें, फिर कक्षा में अनुमति का चयन करें। (यह भी वर्षों से है जब मैंने एसक्यूएल लिखा है; मुझे यकीन है कि एक प्रश्न आपको हाँ या कोई जवाब नहीं दे सकता है, लेकिन मुझे यकीन नहीं है कि यह एक से अधिक टेबल में शामिल होगा या उपक्विरी का उपयोग करेगा या यदि यह डेटाबेस में दो प्रश्न बनाना आसान होगा। :)

उम्मीद है कि इससे मदद मिलती है।

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