आप सही कह रहे हैं, किसी पृष्ठ को सुरक्षित करना और तत्वों को सुरक्षित करना अलग है।
मेरी राय में और व्यवहार में, मुझे लगता है कि किसी भूमिका या उपयोगकर्ता के लिए कोई कोड बांधना वास्तव में गलत तरीका है। इसके बजाय, अनुमतियों को तत्वों और पृष्ठों से बाँधें - फिर भूमिकाओं को उन अनुमतियों से बाँधें। और निश्चित रूप से, उपयोगकर्ताओं को भूमिकाएँ सौंपी जाती हैं।
तीनों का होना जरूरी :
- उपयोगकर्ता
- भूमिकाएं
- अनुमतियां <- आप यही खो रहे हैं
अनुमतियां सुरक्षित तत्व और पृष्ठ हैं, भूमिकाएं या उपयोगकर्ता नहीं आपके कोड में कोई सुराग नहीं होना चाहिए (क्योंकि इसकी आवश्यकता नहीं है) वहां कौन से उपयोगकर्ता या भूमिकाएं हैं - केवल अनुमतियों के नाम।
जब कोई उपयोगकर्ता लॉग इन करता है, तो मैं उनकी भूमिका (भूमिकाओं) को पकड़ लेता हूं। फिर मैं उन सभी भूमिकाओं को प्राप्त करता हूं जो उन भूमिकाओं को सौंपी जाती हैं (बस स्ट्रिंग मानों की एक सूची)।
उदाहरण के लिए, एक पृष्ठ पर मेरे पास हो सकता है:
- आइटम जोड़ें
- आइटम देखें
- आइटम हटाएं
जब मैं उस पृष्ठ को कोड करता हूं, तो मैं वास्तव में उन तत्वों में से प्रत्येक को समान नाम वाले अनुमति स्ट्रिंग्स से सुरक्षित करता हूं ( addItem, viewItem, deleteItem)।
<cfif listContainsNoCase( session.permissions, 'addItem' )>
<!--- code to add item --->
</cfif>
(नोट:मैं इसके लिए एक कस्टम टैग या फ़ंक्शन का उपयोग करने की सलाह देता हूं, लेकिन एक उदाहरण के प्रयोजनों के लिए, उपरोक्त ठीक काम करता है)।
यदि आप इसे इस तरह करते हैं, तो यह अधिकतम लचीलापन और अमूर्तता प्रदान करता है। यदि आप भूमिकाओं के आधार पर तत्वों को सुरक्षित करते हैं, तो आप स्वयं को सीमित करते हैं:
- नई भूमिकाएं जोड़ने के लिए बहुत सारे कोड परिवर्तनों की आवश्यकता होगी!
- भूमिकाओं के बीच अनुमतियों को बदलने के लिए बहुत सारे कोड परिवर्तनों की आवश्यकता होती है!
यदि आप इसे ऊपर बताए अनुसार करते हैं, तो आपको कोड आधार के भीतर अपना सुरक्षा कोड बदलने की आवश्यकता नहीं होगी, क्योंकि "addItem" अनुमति हमेशा "आइटम जोड़ें" तर्क पर होनी चाहिए, है ना? :)पी>
अब यदि आपको "प्रबंधक" प्रकार की भूमिका बनाने की आवश्यकता होती है, जिसमें सभी उपयोगकर्ता भूमिकाएं और कुछ चुनिंदा व्यवस्थापक अधिकार होते हैं, तो आप बस उस भूमिका को बनाते हैं, और इसे सही अनुमतियां प्रदान करते हैं (शायद addItem और editItem, लेकिन deleteItem नहीं) . बेम! अब मेरे पास कोई कोड परिवर्तन नहीं . वाले उपयोगकर्ताओं को असाइन करने के लिए प्रबंधक की भूमिका है !
अगर मैंने अपना कोड "क्या उपयोगकर्ता यह भूमिका है" प्रकार के सामान के साथ छिड़का था - मुझे अपनी नई भूमिका "प्रबंधक" की अनुमति देने के लिए हर जगह अपना कोड संपादित करना होगा - यक!
समझ में आता है?
=)