निम्नलिखित डेटाबेस संरचना (यदि आवश्यक हो तो परिवर्तनीय) मानकर ...
मैं एक दिए गए पृष्ठ पर किसी दिए गए उपयोगकर्ता के लिए "प्रभावी अनुमतियाँ" निर्धारित करने के लिए एक अच्छा तरीका ढूंढ रहा हूं जिससे मुझे पृष्ठ और प्रभावी अनुमतियों की एक पंक्ति वापस करने की अनुमति मिलती है।
मैं सोच रहा हूं कि आदर्श समाधान में एक फ़ंक्शन शामिल हो सकता है जो वर्तमान उपयोगकर्ता के लिए दिए गए पृष्ठ पंक्ति के लिए "प्रभावी अनुमतियों" का मूल्यांकन करने के लिए आवश्यक पुनरावृत्ति करने के लिए सीटीई का उपयोग करता है।
पृष्ठभूमि और कार्यान्वयन विवरण
उपरोक्त स्कीमा एक सामग्री प्रबंधन प्रणाली के लिए एक आरंभ बिंदु का प्रतिनिधित्व करता है जिसमें उपयोगकर्ताओं को जोड़कर और भूमिकाओं से हटाकर अनुमतियाँ दी जा सकती हैं।
सिस्टम में संसाधन (जैसे पृष्ठ) भूमिकाओं के साथ जुड़े हुए हैं, जो उस भूमिका से जुड़े उपयोगकर्ताओं के समूह को अनुमति देता है जो इसे अनुमति देता है।
यह विचार आसानी से एक उपयोगकर्ता को सभी भूमिका से वंचित करने और उस भूमिका में पेड़ में जड़ स्तर पृष्ठ जोड़ने और फिर उस भूमिका के लिए उपयोगकर्ता को जोड़ने में सक्षम होने के लिए है।
यह अनुमति संरचना को तब बनाए रखने की अनुमति देगा जब (उदाहरण के लिए) कंपनी के लिए काम करने वाला एक ठेकेदार लंबे समय के लिए उपलब्ध नहीं है, यह तब उपयोगकर्ता को केवल एक भूमिका से हटाकर अपनी मूल अनुमतियों के समान अनुदान के लिए भी अनुमति देगा। ।
अनुमतियाँ विशिष्ट ACL प्रकार के नियमों पर आधारित होती हैं जो इन नियमों का पालन करके फाइल सिस्टम पर लागू हो सकती हैं।
CRUD अनुमतियाँ अशक्त बिट्स हैं इसलिए उपलब्ध मान सत्य, असत्य, परिभाषित नहीं हैं जहां निम्नलिखित सत्य है:
- झूठी + कुछ भी = झूठी
- सत्य + परिभाषित नहीं = सत्य
- सच्चा + सच्चा = सच्चा
- परिभाषित नहीं + परिभाषित नहीं = परिभाषित नहीं
यदि कोई भी अनुमति गलत है -> झूठी है यदि कोई सत्य है -> सत्य एल्स (सभी परिभाषित नहीं) -> गलत
दूसरे शब्दों में, आपको किसी भी चीज़ पर कोई अनुमति नहीं मिलती है जब तक कि आपको उन्हें भूमिका सदस्यता के माध्यम से प्रदान नहीं किया जाता है और एक इनकार नियम एक अनुमति नियम से आगे निकल जाता है।
अनुमतियों का "सेट" जो लागू होता है वह सभी अनुमतियाँ है जो पेड़ पर लागू होती है और वर्तमान पृष्ठ सहित, दूसरे शब्दों में: यदि कोई झूठा किसी भी भूमिका में पेड़ के किसी भी पृष्ठ पर इस पृष्ठ पर लागू होता है तो परिणाम गलत है , लेकिन अगर पूरे पेड़ को यहाँ तक परिभाषित नहीं किया गया है, तो वर्तमान पृष्ठ में एक सही नियम शामिल है, परिणाम यहाँ सच है, लेकिन माता-पिता के लिए गलत होगा।
यदि संभव हो तो मैं db संरचना को शिथिल रखना चाहूँगा, यह भी ध्यान रखें कि यहाँ मेरा लक्ष्य कुछ ऐसा करने में सक्षम होना है: select * from pages where effective permissions (read = true) and user = ?
इसलिए कोई भी समाधान मुझे प्रभावी अनुमतियों के साथ एक क्वेरी सेट करने की अनुमति देने में सक्षम होना चाहिए। किसी तरह से (उन्हें वापस करना वैकल्पिक है जब तक कि मापदंड निर्दिष्ट किया जा सकता है)।
मान लें कि 2 पृष्ठ मौजूद हैं, जहाँ 1 दूसरे का बच्चा है और 2 भूमिकाएँ मौजूद हैं, एक व्यवस्थापक उपयोगकर्ताओं के लिए और 1 केवल उपयोगकर्ताओं को पढ़ने के लिए है, दोनों केवल रूट स्तर के पेज से जुड़े हुए हैं मैं उम्मीद करता हूँ कि यह कुछ इस तरह से दिखाई देगा जैसे अपेक्षित आउटपुट:
Admin user:
Id, Parent, Name, Create, Read, Update, Delete
1, null, Root, True , True, True , True
2, 1, Child,True , True, True , True
Read only user:
Id, Parent, Name, Create, Read, Update, Delete
1, null, Root, False , True, False , False
2, 1, Child,False , True, False , False
इस प्रश्न के बारे में आगे की चर्चा यहाँ शुरू होने वाले मुख्य साइट चैट रूम में पाई जा सकती है ।