PHP: फ़ंक्शन पैरामीटर और तर्क। व्यवस्थापक भाग तक पहुंच अधिकारों को अलग करने के लिए एक तंत्र का कार्यान्वयन, उपयोगकर्ता कार्यों के लिए तर्क पारित करना

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

उपयोगकर्ता-परिभाषित कार्यों के लिए तर्क पारित करना

किसी फ़ंक्शन की घोषणा करते समय, आप उन पैरामीटरों की एक सूची निर्दिष्ट कर सकते हैं जिन्हें फ़ंक्शन में पास किया जा सकता है, उदाहरण के लिए:

फ़ंक्शन फ़ंक्शन ($a , $b , /* ..., */ $z ) { ... };
?>

फ़ंक्शन() फ़ंक्शन को कॉल करते समय, आपको सभी पारित पैरामीटर निर्दिष्ट करना होगा, क्योंकि वे आवश्यक हैं। PHP में, उपयोगकर्ता-परिभाषित फ़ंक्शन में वैकल्पिक या डिफ़ॉल्ट पैरामीटर हो सकते हैं, लेकिन उस पर बाद में और अधिक जानकारी होगी।

स्थापित परंपराओं के अनुसार, सभी प्रोग्रामिंग भाषाओं में दो प्रकार के फ़ंक्शन तर्क होते हैं:

  • पैरामीटर-मान;
  • पैरामीटर-चर।

फ़ंक्शंस मान पैरामीटर को नहीं बदल सकते हैं, यानी, यह फ़ंक्शन के लिए केवल पढ़ने योग्य है - यह इसका उपयोग कर सकता है, लेकिन इससे अधिक कुछ नहीं। किसी वैरिएबल को मान पैरामीटर के रूप में निर्दिष्ट करना आवश्यक नहीं है; आप स्वयं मान निर्दिष्ट कर सकते हैं, इसलिए नाम - मान पैरामीटर है।

डिफ़ॉल्ट रूप से, किसी फ़ंक्शन के तर्क मान द्वारा पारित किए जाते हैं (इसका मतलब है कि यदि आप फ़ंक्शन के अंदर किसी तर्क का मान बदलते हैं, तो फ़ंक्शन के बाहर का मान अभी भी वही रहेगा)। यहाँ एक उदाहरण है:

फ़ंक्शन फ़ंक्शन ($स्ट्रिंग)
{
गूंज "

पैरामीटर = $स्ट्रिंग

" ;
}

$str = 777 ;
फ़ंक्शन(777);
समारोह( $str);

// "फ़ंक्शन" फ़ंक्शन स्ट्रिंग "पैरामीटर = 777" को दो बार प्रिंट करेगा

?>

मान पैरामीटर के विपरीत, फ़ंक्शन चलने के दौरान परिवर्तनीय पैरामीटर को बदला जा सकता है। यहां अब आप कोई मान पास नहीं कर सकते, आपको एक वेरिएबल पास करना होगा। PHP वेरिएबल पैरामीटर घोषित करने के संदर्भ में एक वेरिएबल को पास करने के तंत्र का उपयोग करता है।

यदि आप किसी फ़ंक्शन को उसके तर्कों को संशोधित करने की अनुमति देना चाहते हैं, तो आपको उन्हें संदर्भ द्वारा पारित करना होगा।

यदि आप चाहते हैं कि तर्क हमेशा संदर्भ द्वारा पारित किया जाए, तो आपको फ़ंक्शन घोषणा में तर्क नाम से पहले एक एम्परसेंड (&) निर्दिष्ट करना होगा:

फ़ंक्शन फ़ंक्शन (और $स्ट्रिंग)
{
$string .= "और यह अंदर है।" ;
}
$str = "यह लाइन फ़ंक्शन के बाहर है,";
फ़ंक्शन ($str);
प्रतिध्वनि $str ; // प्रिंट करता है "यह लाइन फ़ंक्शन के बाहर है, और यह लाइन अंदर है।"
?>

न्यूनता समायोजन

प्रोग्रामिंग करते समय, अक्सर पैरामीटरों की परिवर्तनीय संख्या के साथ एक फ़ंक्शन बनाने की आवश्यकता होती है। इसके दो कारण हैं:

  • बहुत सारे पैरामीटर हैं. हर बार सभी पैरामीटर निर्दिष्ट करने का कोई मतलब नहीं है;
  • फ़ंक्शंस को पैरामीटर के सेट के आधार पर विभिन्न प्रकार के मान लौटाने होंगे।

PHP में, फ़ंक्शन उन्हें दिए गए पैरामीटर के आधार पर कोई भी मान लौटा सकते हैं।

फ़ंक्शन मेककप ($ प्रकार = "चाय")
{
वापस करना "एक कप $टाइप बनाएं.\n";
}
इको मेककप();
इको मेककप ("कॉफ़ी");
?>

उपरोक्त स्क्रिप्ट का परिणाम इस प्रकार होगा:

एक कप चाय बनाना
एक कप कॉफ़ी बनाओ

PHP आपको सरणियों और विशेष प्रकार NULL को डिफ़ॉल्ट मान के रूप में उपयोग करने की भी अनुमति देता है, उदाहरण के लिए:

फ़ंक्शन मेककप ($ प्रकार = सरणी ("कॉफी"), $ मेकर = शून्य)
{
$डिवाइस = is_null ($निर्माता)? "चीनी" : $निर्माता ;
वापस करना "एक कप बनाओ". जुड़ें ("", ", $ प्रकार)। " $डिवाइस के साथ.\n" ;
}
इको मेककप();
इको मेककप (सरणी ("कॉफी", "चाय"), "क्रीम");
?>

विचाराधीन स्क्रिप्ट निम्नलिखित आउटपुट देगी:

चीनी के साथ एक कप कॉफी बनाएं। क्रीम के साथ एक कप कॉफी, चाय बनाएं।

डिफ़ॉल्ट मान एक स्थिर अभिव्यक्ति होना चाहिए.

ध्यान दें कि डिफ़ॉल्ट मान वाले सभी तर्क उन तर्कों के दाईं ओर स्थित होने चाहिए जिनमें डिफ़ॉल्ट मान नहीं हैं, अन्यथा आपका कोड आपकी अपेक्षा के अनुरूप काम नहीं कर सकता है। निम्नलिखित उदाहरण पर विचार करें:

फ़ंक्शन मेककप ($ प्रकार = "चाय", $ cond )
{
वापस करना ;
}

इको मेककप ("गर्म"); //जैसा हम उम्मीद कर सकते हैं वैसा काम नहीं करेगा
?>

उपरोक्त स्क्रिप्ट का आउटपुट कुछ इस प्रकार होगा:

चेतावनी: मेककप() के लिए गुम तर्क 2 c:\inetpub\site\test.phpऑनलाइन 2
एक कप गरम खाना बनाओ.

आइए अब विचारित स्क्रिप्ट को संशोधित करें, उसमें त्रुटियों को सुधारें:

फ़ंक्शन मेककप ($cond , $प्रकार = "चाय")
{
वापस करना"एक कप $टाइप $cond बनाएं।\n";
}

इको मेककप ("गर्म"); // अब हमारी स्क्रिप्ट सही ढंग से काम करती है!
?>

संशोधित स्क्रिप्ट का परिणाम इस प्रकार दिखेगा:

एक कप गर्म चाय बनाओ.

ध्यान! PHP 5 के बाद से, डिफ़ॉल्ट मानों को संदर्भ द्वारा पारित किया जा सकता है!

फ़ंक्शंस में तर्कों की परिवर्तनीय संख्या

कभी-कभी हमें ठीक से पता नहीं होता कि हमारे फ़ंक्शन में कितने पैरामीटर पास किए जाएंगे। विशेष रूप से इस मामले के लिए, PHP डेवलपर्स ने विभिन्न प्रकार के तर्कों का उपयोग करने की क्षमता प्रदान की है।

इस सुविधा का कार्यान्वयन काफी पारदर्शी है और इसमें फ़ंक्शंस का उपयोग शामिल है func_num_args() , func_get_arg()और func_get_args() .

आइए विचारित मानक कार्यों की क्षमताओं पर विचार करें:

मानक कार्य func_num_args()उपयोगकर्ता फ़ंक्शन को दिए गए तर्कों की संख्या लौटाता है:

फ़ंक्शन फ़ंक्शन()
{
$numargums = func_num_args();
गूंज "तर्कों की संख्या: $numargums\n";
}

फ़ंक्शन(1, 2, 3); // स्क्रिप्ट "तर्कों की संख्या: 3" प्रिंट करेगी
?>

मानक कार्य func_get_arg()उपयोगकर्ता फ़ंक्शन को दिए गए तर्कों की सूची से एक तत्व लौटाता है:

फ़ंक्शन फ़ंक्शन()
{
$numargs = func_num_args();
गूंज "तर्कों की संख्या: $numargs
\एन"
;
अगर ($संख्या >=2 ) (
गूंज "दूसरा तर्क:". func_get_arg(1). "
\एन" ;
}
}

फ़ंक्शन(1, 2, 3);
?>

ग्राहकों के लिए

फ़ंक्शन तर्क

फ़ंक्शन तर्क क्या हैं?

फ़ंक्शन तर्कपरिभाषित किए जा रहे फ़ंक्शन के नाम के बाद कोष्ठक में अल्पविराम से अलग करके सूचीबद्ध किया गया है और ये इसके स्थानीय चर हैं।

कोई भी अभिव्यक्ति जो प्रसंस्करण के लिए फ़ंक्शन में पास की जाती है और गणना की जा सकती है, उसे तर्क मान के रूप में उपयोग किया जा सकता है। इस मामले में, फ़ंक्शन कोई भी तर्क नहीं ले सकता है, लेकिन यदि कोई तर्क हैं, तो उनकी गणना बाएं से दाएं की ओर की जाती है।

फ़ंक्शन तर्कों को मान और संदर्भ द्वारा पास करना

गलती करना तर्कों को मान के आधार पर फ़ंक्शन में पास किया जाता है, लेकिन समर्थन भी किया संदर्भ द्वारा तर्क पारित करनाऔर डिफ़ॉल्ट मान.

मान द्वारा तर्क पारित करते समय, फ़ंक्शन के अंदर तर्क का मान बदलने पर बाहरी चर का मूल मान स्थिर रहता है। यदि आप चाहते हैं कि कोई फ़ंक्शन बाहरी चर के मान को प्रभावित करने में सक्षम हो, तो आपको संदर्भ द्वारा इसके लिए तर्क पारित करना होगा। यह फ़ंक्शन विवरण में तर्क नाम से पहले एम्परसेंड प्रतीक "&" का उपयोग करके किया जाता है (उदाहरण संख्या 1 देखें)।

उदाहरण क्रमांक 1. फ़ंक्शन तर्कों को मान और संदर्भ द्वारा पास करना

डिफ़ॉल्ट फ़ंक्शन तर्क मान

PHP में भी इसका उपयोग संभव है डिफ़ॉल्ट मान फ़ंक्शन तर्क, जो फ़ंक्शन को कॉल करते समय इस तर्क में कोई मान पारित नहीं होने पर उपयोग किए गए मानों का प्रतिनिधित्व करता है। डिफ़ॉल्ट तर्क मान सेट करने के लिए, आपको फ़ंक्शन परिभाषा में इस तर्क को वांछित मान निर्दिष्ट करने की आवश्यकता है (उदाहरण संख्या 2 देखें)। इस मामले में, डिफ़ॉल्ट मानों में मान द्वारा पारित तर्क और संदर्भ द्वारा पारित तर्क दोनों हो सकते हैं। हालाँकि, किसी भी स्थिति में, डिफ़ॉल्ट मान निर्दिष्ट किए गए सभी तर्क उन तर्कों के बाद सूची में दिखाई देने चाहिए जिनमें डिफ़ॉल्ट मान नहीं हैं। इसके अतिरिक्त, केवल स्थिर अभिव्यक्ति, सरणियाँ और NULL को डिफ़ॉल्ट मान के रूप में उपयोग किया जा सकता है। उदाहरण के लिए, वेरिएबल या फ़ंक्शन कॉल का उपयोग नहीं किया जा सकता है।

उदाहरण क्रमांक 2. डिफ़ॉल्ट तर्क मानों का उपयोग करना

परिवर्तनीय लंबाई तर्क सूची

यदि फ़ंक्शन में पारित तर्कों की सटीक संख्या पहले से ज्ञात नहीं है, तो आप इसका उपयोग कर सकते हैं परिवर्तनीय लंबाई तर्क सूची. ऐसी सूची दीर्घवृत्त "..." से पहले एक विशेष चर का उपयोग करके बनाई जाती है। परिणामस्वरूप, तर्कों को एक सरणी के रूप में निर्दिष्ट चर में स्थानांतरित कर दिया जाएगा (उदाहरण संख्या 3 देखें)।

उदाहरण संख्या 3. परिवर्तनीय लंबाई तर्क सूची का उपयोग करना

आप इलिप्सिस से पहले नियमित तर्क निर्दिष्ट कर सकते हैं, लेकिन फ़ंक्शन में दिए गए अन्य सभी तर्क सरणी में शामिल किए जाएंगे। इसके अलावा, इलिप्सिस से पहले, आप उन तर्कों के प्रकार को इंगित कर सकते हैं जिन्हें सरणी में दर्ज किया जा सकता है, साथ ही संदर्भ द्वारा तर्क पारित करने के लिए एम्परसेंड चिह्न "&" (उदाहरण संख्या 4 देखें)।

"; //आउटपुट 10, क्योंकि मान फ़ंक्शन //संदर्भ द्वारा पारित किया गया था और फिर फ़ंक्शन द्वारा 10 इको $a_1 में बदल दिया गया था; ?>

उदाहरण संख्या 4. परिवर्तनीय लंबाई तर्क सूची का उपयोग करने की विशेषताएं

फ़ंक्शन तर्क के रूप में पारित सरणी को उसके तत्वों के रूप में फ़ंक्शन तर्कों में विस्तारित करने के लिए एलिप्सिस "..." का उपयोग करने की अनुमति है (उदाहरण संख्या 5 देखें)।

"; //एरे को वेरिएबल $a_3= पर असाइन करें; //फ़ंक्शन में दिए गए एरे का विस्तार करें //आउटपुट 3 इको m_sum_2(...$a_3); ?>

उदाहरण क्रमांक 5. कॉल किए जाने पर किसी फ़ंक्शन को दिए गए तर्कों की श्रृंखला का विस्तार करना

तर्कों तक पहुँचने के लिए कार्य

  • func_get_args()- फ़ंक्शन तर्कों से युक्त एक सरणी लौटाता है;
  • func_get_arg(n)- निर्दिष्ट फ़ंक्शन तर्क लौटाता है, जहां n=0,1,2,... सूची में तर्क की संख्या है, जो शून्य से शुरू होती है (याद रखें कि तर्कों की गणना बाएं से दाएं की ओर की जाती है);
  • func_num_args()- फ़ंक्शन में वास्तव में पारित तर्कों की संख्या लौटाता है।

"; //फ़ंक्शन को दिए गए तीसरे तर्क का मान प्रिंट करेगा echo func_get_arg(2); //फ़ंक्शन तर्कों का योग लौटाएं $sum लौटाएं; ) //फ़ंक्शन को कॉल किया गया। प्रिंट 38, यानी तर्कों की संख्या पारित 3 है, //और मान तीसरा तर्क 8 के बराबर है (तत्वों की संख्या शून्य से शुरू होती है) m_sum(1,2,8);

उदाहरण संख्या 6. तर्कों के साथ काम करने के लिए विशेष फ़ंक्शन का उपयोग करना

ध्यान दें कि फ़ंक्शन तर्कों को विशेष फ़ंक्शन का उपयोग करके भी एक्सेस किया जा सकता है, खासकर यदि फ़ंक्शन प्राप्त होने की अपेक्षा से अधिक तर्क लेता है (उदाहरण #6 देखें):

शीघ्रता से अन्य पृष्ठों पर जाएँ

Http://साइट कॉपीराइट © पेट्र रोमानोव्स्की, मिन्स्क, 2016-2019।

अपने वेब विकास अभ्यास में, मुझे अक्सर ऐसी स्थितियाँ देखने को मिलती हैं जिनमें ग्राहक एक विशिष्ट लक्ष्य निर्धारित करते हैं, अर्थात्, कुछ उपयोगकर्ताओं तक पहुंच के संबंध में व्यवस्थापक पैनल के हिस्सों का विभाजन। इसके अलावा, इस मॉड्यूल का विकास एक विस्तार योग्य प्रणाली के संदर्भ में किया गया था, यानी, मॉड्यूल की एक निश्चित संख्या के साथ, जिस तक पहुंच आयोजित की जाती है, और, तदनुसार, सिस्टम उपयोगकर्ताओं की असीमित संख्या।

खैर, यह विषय अपने आप में काफी कठिन है, और समस्या के विश्लेषण और निरूपण के लिए कुछ समय की आवश्यकता है।

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

आइए शुरुआत से ही हमारे चुने हुए छद्म सिस्टम पर एक मॉड्यूलर सिस्टम की वास्तुकला पर चर्चा करें।

सभी मॉड्यूल मुख्य दस्तावेज़ (सूचकांक फ़ाइल) से जुड़े आवेषण के रूप में प्रस्तुत किए जाते हैं। प्लगइन अनुरोध QUERY_STRING क्वेरी स्ट्रिंग से आता है, और प्लगइन का नाम अधिनियम तर्क के रूप में पारित किया जाता है। फ़ाइल अनुक्रमणिका में किसी बिंदु पर, यह पैरामीटर पुनर्प्राप्त और संसाधित किया जाता है। बाद में, यदि उपयोगकर्ता के पास पढ़ने के संदर्भ में मॉड्यूल तक पहुंचने के पर्याप्त अधिकार हैं, तो क्वेरी लाइन में निर्दिष्ट मॉड्यूल के अस्तित्व की जांच की जाती है, और यदि यह मौजूद है, तो यह इंडेक्स फ़ाइल से जुड़ा हुआ है।

मैंने "पढ़ने के संदर्भ" का उल्लेख एक कारण से किया है, क्योंकि हमारा सिस्टम सिस्टम के साथ काम करने के लिए दो संदर्भों के अस्तित्व को मानता है, अर्थात् पढ़ना और लिखना। इस मामले में, पढ़ने का तात्पर्य मॉड्यूल और उसके उन हिस्सों तक सीधी पहुंच है जिसमें डेटाबेस में डेटा संरचना में परिवर्तन करना शामिल नहीं है। रिकॉर्डिंग से हमारा तात्पर्य डेटाबेस में संग्रहीत जानकारी में सीधे परिवर्तन करना है।

इस तंत्र को लागू करने के लिए, हम 'do' क्वेरी स्ट्रिंग वैरिएबल के मान की जांच करेंगे, जो मॉड्यूल में ही संसाधित होता है और यह जानकारी देता है कि मॉड्यूल के किस अनुभाग को उपयोगकर्ता तक पहुंच प्रदान करने की आवश्यकता है।

do का मान निश्चित किया जाएगा, यह वेरिएबल निम्नलिखित मान लेगा:

  • मुख्य - मॉड्यूल का मुख्य भाग (पढ़ने के संदर्भ में उपलब्ध)
  • config - मॉड्यूल कॉन्फ़िगरेशन अनुभाग (रिकॉर्डिंग संदर्भ में उपलब्ध)
  • बनाएं - डेटाबेस में जानकारी जोड़ने के लिए कुछ क्रियाएं करें (रिकॉर्ड के संदर्भ में उपलब्ध)
  • हटाएं - एक अनुभाग तक पहुंच जो किसी दिए गए मॉड्यूल के संदर्भ में कुछ जानकारी को हटाने की क्षमता प्रदान करता है (रिकॉर्ड के संदर्भ में उपलब्ध)
  • संपादित करें - मॉड्यूल के संदर्भ में जानकारी संपादित करने तक पहुंच (रिकॉर्ड के संदर्भ में उपलब्ध)

सामान्य तौर पर, इस सूची को बढ़ाया जा सकता है, लेकिन सब कुछ केवल परियोजना के पैमाने और इसकी कार्यात्मक आवश्यकताओं पर निर्भर करता है।

अब सीधे मॉड्यूल के बारे में। प्रोजेक्ट फ़ाइल सिस्टम के संदर्भ में एक निश्चित मॉड्यूल के भौतिक अस्तित्व के अलावा, मॉड्यूल को एक विशेष डेटाबेस तालिका में भी जोड़ा जाना चाहिए, जिसमें सिस्टम में सभी मौजूदा मॉड्यूल के बारे में जानकारी होगी। इस तालिका में डेटा जोड़ना और बदलना आमतौर पर सीधे मॉड्यूल के संदर्भ में किया जाता है, यानी सिस्टम में उनकी स्थापना के दौरान। हालाँकि, यह पहले से ही एक्स्टेंसिबल सिस्टम को देखने के सिद्धांतों में गहराई है, जिसके बारे में हम किसी और समय बात करेंगे, और इसलिए, हम खुद को मॉड्यूल के बारे में डेटा को मैन्युअल रूप से अपडेट करने और जोड़ने तक सीमित रखेंगे।

इस प्रकार, एक सिस्टम मॉड्यूल के बारे में एक रिकॉर्ड में निम्नलिखित जानकारी होगी: मॉड्यूल नाम का अंग्रेजी पहचानकर्ता, जो पर्यावरण चर GET - अधिनियम के मूल्य के समान होगा (मॉड्यूल सीधे इसके संबंध में अनुरोध किया जाएगा), मॉड्यूल का रूसी पहचानकर्ता, जिसका उपयोग मॉड्यूल की सूची में किया जाएगा।

मॉड्यूल के अलावा, हमारे पास दो और टेबल होंगे, अर्थात् एक टेबल जिसमें एक्सेस राइट्स प्रोफाइल से संबंधित डेटा संग्रहीत किया जाएगा और एक टेबल जिसमें सीधे उपयोगकर्ताओं के बारे में जानकारी होगी।

सुरक्षा प्रोफ़ाइल तालिका में केवल तीन फ़ील्ड शामिल होंगे - एक प्रोफ़ाइल पहचानकर्ता (रिकॉर्ड पहचानकर्ता का संख्यात्मक मान), एक टेक्स्ट मॉड्यूल पहचानकर्ता (उपयोगकर्ताओं के लिए इरादा), साथ ही एक विशेष रूप से जेनरेट किया गया टेक्स्ट लेबल जिसमें संदर्भ में उपयोगकर्ता अधिकारों के बारे में जानकारी शामिल है प्रत्येक मॉड्यूल का.

खैर, आइए इस विशेष संरचना पर एक नजर डालें। यह इस प्रकार होगा: [मॉड्यूल_इंडिफ़ियर: + \: + \;] *

अर्थात्, जोड़ियों की एक सूची है: मॉड्यूल नाम ":" अधिकार पढ़ें "," अधिकार लिखें ";"। इस मामले में, यह लेबल तब अपडेट किया जाता है जब सिस्टम तक उपयोगकर्ता के पहुंच अधिकारों में परिवर्तन किए जाते हैं। यदि सिस्टम में किसी मॉड्यूल के बारे में जानकारी दिखाई देती है जो इस लेबल में शामिल नहीं है, तो आपको बस संपादन प्रक्रिया को पूरा करने की आवश्यकता है, और डेटा स्वचालित रूप से सहेजा जाएगा।

अब हमें केवल एक डेटाबेस तालिका की संरचना पर विचार करना है, और हम एल्गोरिथम भाग को लागू करने के लिए आगे बढ़ सकते हैं, अर्थात् सिस्टम उपयोगकर्ताओं के बारे में जानकारी वाली एक तालिका, क्योंकि उन तक पहुंच अधिकार निर्दिष्ट करना हमारा मुख्य कार्य है।

मैं इसमें कुछ भी अतिरिक्त नहीं जोड़ूंगा, बल्कि केवल वही जोड़ूंगा जो इस लेख के विषय के संदर्भ में उपयोग किया जाएगा। उपयोगकर्ता तालिका में निम्नलिखित फ़ील्ड होंगे: उपयोगकर्ता आईडी (संख्यात्मक काउंटर), लॉगिन, पासवर्ड (मूल पासवर्ड का हैश), उपयोगकर्ता सुरक्षा प्रोफ़ाइल (उपयोगकर्ता समूह आईडी, सिस्टम में अधिकारों के सापेक्ष), और बस इतना ही। मुझे ऐसा लगता है कि यह जानकारी आपके और मेरे लिए कार्य को लागू करने के लिए काफी है, और मैं अन्य सभी ऐड-ऑन स्वयं करने का अवसर देता हूं।

इसलिए, हमने संरचना पर चर्चा की, और, मुझे आशा है, हर किसी को पहले से ही कुछ विचार है कि हम लेख के विषय में निर्धारित कार्य को कैसे लागू करेंगे। अब मैं ऊपर वर्णित तालिकाओं के लिए सहायक एसक्यूएल कोड प्रदान करूंगा, जिसके बाद मैं तुरंत उपयोगकर्ता पहुंच अधिकारों की जांच के लिए एल्गोरिदम को लागू करने के साथ-साथ एक्सेस प्रोफाइल बनाने और बदलने के लिए आगे बढ़ूंगा। प्रत्येक व्यक्तिगत मॉड्यूल के बाद, हम पाठकों के किसी भी प्रश्न पर विस्तार से चर्चा करेंगे।

तालिका `मॉड्यूल`:

तालिका बनाएं `मॉड्यूल` (`id` bigint(20) शून्य नहीं ऑटो_इंक्रिकमेंट, `indefier` टेक्स्ट कोलेट utf8_unicode_ci शून्य नहीं, `शीर्षक` टेक्स्ट कोलेट utf8_unicode_ci शून्य नहीं, प्राथमिक कुंजी (`id`)) इंजन=MyISAM AUTO_INCREMENT=1 डिफ़ॉल्ट CHARSET=utf8 COLLATE=utf8_unicode_ci;

`सुरक्षित_समूह` तालिका:

टेबल बनाएं `सिक्योर_ग्रुप्स` (`आईडी` बिगिंट(20) शून्य नहीं, ऑटो_इन्क्रीमेंट, `शीर्षक` टेक्स्ट का मिलान utf8_unicode_ci शून्य नहीं, `पर्म` टेक्स्ट का मिलान utf8_unicode_ci शून्य नहीं, प्राथमिक कुंजी (`आईडी`)) इंजन=MyISAM AUTO_INCREMENT=1 डिफ़ॉल्ट CHARSET=utf8 COLLATE=utf8_unicode_ci ;

तालिका `उपयोगकर्ता`

तालिका बनाएँ `उपयोगकर्ता` (`id` bigint(20) शून्य नहीं ऑटो_इन्क्रीमेंट, `लॉगिन` टेक्स्ट मिलान utf8_unicode_ci शून्य नहीं, `passwd` पाठ मिलान utf8_unicode_ci शून्य नहीं, `groupId` int(1) शून्य नहीं डिफ़ॉल्ट "0", प्राथमिक कुंजी (`id`)) इंजन=MyISAM AUTO_INCREMENT=1 डिफ़ॉल्ट वर्णसेट=utf8 COLLATE=utf8_unicode_ci;

अस्थायी=सरणी(); $यह->अस्थायी["_परिणाम"]=0; $यह->temp["_uid"]=विस्फोट("::",$_COOKIE["site_hash"]); $यह->अस्थायी["_uid"]=$यह->अस्थायी["_uid"]; $this->temp["_gid"]=$this->getUserSecurityAccess($this->temp["_uid"]); $this->temp["_conn_id"]=mysql_connect("host","user","passwd"); mysql_select_db('डेटाबेस'); $this->temp["_q1"]=mysql_query("SELECT perms" ."FROM `secure_groups`" ."WHERE id=".$this->temp["_gid"]); $this->temp["_access_stamp"]=mysql_fetch_assoc($this->temp["_q1"]); $this->temp["_access_stamp"]=$this->temp["_access_stamp"]["perms"]; $this->temp["_access_stamp"]=explode(";",$this->temp["_access_stamp"]); $this->temp["_access_stamp"]=array_slice($this->temp["_access_stamp"],0,-1); foreach($this->temp["_access_stamp"] as $this->temp["v"])( $this->temp["_mod_access"]=explode(":",$this->temp["v "]); $this->temp["_mod_indefier"]=$this->temp["_mod_access"]; if($this->temp["_mod_indefier"]==$module)( $this->temp[ "_perms"]=विस्फोट(",",$this->temp["_mod_access"]); स्विच($act)( केस "r": $this->temp["_result"]=($this-> अस्थायी["_perms"]==1)? मामला "w": $this->temp["_result"]=($this->temp["_perms"]==1)? ) ) mysql_close($conn_id); वापसी $this->temp["_result"]; ) ) ?>

यह वर्ग ऊपर वर्णित एल्गोरिथम कार्य को लागू करने के लिए डिज़ाइन किए गए कार्यों को कार्यान्वित करता है। अब हम प्रत्येक फ़ंक्शन पर अलग से चर्चा करेंगे।

सुरक्षित::getUserId() फ़ंक्शन

इस फ़ंक्शन का उपयोग करते हुए, हमारा मतलब है कि सिस्टम में उपयोगकर्ता प्राधिकरण के दौरान, `site_hash` वैरिएबल को $_COOKIE पर्यावरण चर में सेट किया गया था, जिसमें सिस्टम में उपयोगकर्ता के पहचानकर्ता और सिस्टम में इसकी प्रामाणिकता को सत्यापित करने के लिए एक हैश शामिल था। फ़ंक्शन बस पहचानकर्ता के मान को हटा देता है, और आउटपुट के रूप में उसका मान लौटा देता है।

फ़ंक्शन सुरक्षित::getUserSecurityAccess($id)

आउटपुट पर, यह फ़ंक्शन सिस्टम में वर्तमान उपयोगकर्ता का सुरक्षा प्रोफ़ाइल पहचानकर्ता लौटाता है।

फ़ंक्शन सुरक्षित::checkUserPermission($module,$act))

पैरामीटर के रूप में पारित मॉड्यूल के संदर्भ में पढ़ने/लिखने की क्रियाएं करने के उपयोगकर्ता के अधिकारों के संबंध में डेटाबेस से एक अनुरोध किया जाता है।

जो कुछ बचा है वह $_COOKIE वातावरण में एक वेरिएबल बनाने की प्रक्रिया का वर्णन करना है, और लेख के विषय को हल माना जा सकता है।

प्राधिकरण प्रक्रिया उपयोगकर्ता के व्यक्तिगत डेटा (लॉगिन और पासवर्ड) को एक विशेष फॉर्म में दर्ज करने जैसी दिखेगी, जिसे भेजने के बाद उपयोगकर्ता द्वारा सबमिट किए गए डेटा को checkAuthData() फ़ंक्शन विधि का उपयोग करके संसाधित किया जाएगा, और, यदि डेटा सही है, उपयोगकर्ता डेटा को उपयोगकर्ता द्वारा निर्धारित अवधि के लिए रिकॉर्डिंग कुकीज़ के रूप में, या किसी निर्दिष्ट मूल्य के अभाव में, डिफ़ॉल्ट अवधि के लिए सहेजा जाएगा।

$_COOKIE पर्यावरण चर में संग्रहीत डेटा की प्रामाणिकता की जांच करने के लिए, हम EatCookie() फ़ंक्शन का उपयोग करेंगे, जो बूलियन सत्यापन परिणाम (सही - गलत) लौटाकर डेटा को मान्य करेगा।

मैं सबमिट करने के लिए फॉर्म प्रदान नहीं करता, क्योंकि यह प्रोग्रामिंग सिद्धांत का हिस्सा नहीं है, केवल फ़ील्ड पहचानकर्ताओं को दर्शाता है।

  • `यूलॉगिन` - उपयोगकर्ता लॉगिन
  • `upaswd` - उपयोगकर्ता पासवर्ड
  • `stime` - उपयोगकर्ता द्वारा निर्धारित सत्र समय (1 से 5 घंटे तक)
  • `auth` - सबमिट बटन का नाम

बस इतना ही। जो कुछ बचा है वह प्रयास करना, प्रयोग करना, गलतियाँ करना और समाधान ढूंढना है, जिसे मैं पूरी तरह से आप पर छोड़ता हूँ।

मुझे उम्मीद है कि हम जल्द ही मिलेंगे, और जिनके पास लेख के संबंध में मेरे लिए कोई प्रश्न है, और न केवल - को लिखें [ईमेल सुरक्षित], या तो पर [ईमेल सुरक्षित].

सादर, आईएनपीपी के आईटी विभाग के प्रमुख किरिल कारपेंको।



मित्रों को बताओ