वेब अनुप्रयोग में सिम्फनी 2 में एसीएल कार्यान्वयन का उपयोग करते समय, हम एक उपयोग मामले में आ गए हैं जहां एसीएल का उपयोग करने का सुझाया गया तरीका (एक डोमेन ऑब्जेक्ट पर उपयोगकर्ता अनुमतियों की जांच करना) असुरक्षित हो जाता है। इस प्रकार, हम सोचते हैं कि एसीएल एपीआई का कुछ हिस्सा मौजूद है जिसका उपयोग हम अपनी समस्या को हल करने के लिए कर सकते हैं।किसी निश्चित उपयोगकर्ता की अनुमतियों (उदा। EDIT) के अनुसार डोमेन-ऑब्जेक्ट्स की सूची फ़िल्टर करने के लिए एसीएल का उपयोग कैसे करें?
उपयोग केस एक नियंत्रक में है जो टेम्पलेट में प्रस्तुत किए जाने वाले डोमेन ऑब्जेक्ट्स की एक सूची तैयार करता है, ताकि उपयोगकर्ता यह चुन सकें कि वह कौन सी ऑब्जेक्ट्स संपादित करना चाहती है। उपयोगकर्ता को डेटाबेस में सभी ऑब्जेक्ट्स को संपादित करने की अनुमति नहीं है, इसलिए सूची तदनुसार फ़िल्टर की जानी चाहिए।
यह कर सकता है (अन्य समाधान के अलावा) दो रणनीतियों के अनुसार किया जाना:
1) एक क्वेरी फिल्टर है कि वस्तु के लिए वर्तमान उपयोगकर्ता के एसीएल से मान्य वस्तु आईडी (या वस्तुओं) के साथ किसी क्वेरी जोड़ देता है। अर्थात:
WHERE <other conditions> AND u.id IN(<list of legal object ids here>)
2) एक के बाद क्वेरी फिल्टर है कि वस्तुओं उपयोगकर्ता के बाद पूरी सूची डेटाबेस से लिया गया कर दिया गया है के लिए सही अनुमति नहीं है निकाल देता है। आईई:
$objs = <query for objects>
$objIds = <getting all the permitted obj ids from the ACL>
for ($obj in $objs) {
if (in_array($obj.id, $objIds) { $result[] = $obj; }
}
return $result;
पहली रणनीति बेहतर है क्योंकि डेटाबेस सभी फ़िल्टरिंग कार्य कर रहा है, और दोनों को दो डेटाबेस क्वेरीज़ की आवश्यकता है। एसीएल के लिए एक और वास्तविक क्वेरी के लिए एक, लेकिन यह संभवतः अपरिहार्य है।
क्या सिम्फनी 2 में इन रणनीतियों में से किसी एक (या वांछित परिणाम प्राप्त करने में कुछ) का कोई कार्यान्वयन है?
लेकिन मुझे नहीं लगता कि आप इसके साथ बड़े डेटासेट को कैसे संभालना चाहते हैं। कल्पना कीजिए कि आपके पास 10000 रिकॉर्ड हैं, यहां तक कि एक पेजिनेशन के साथ, मुझे यह जानना होगा कि उपयोगकर्ता द्वारा कितने रिकॉर्ड स्वामित्व में हैं। क्या टेबल में सभी इकाइयों के माध्यम से घुसपैठ किए बिना कोई रास्ता है? – stoefln
मैं पूरी तरह से @stoefln से सहमत हूं, ऐसे समाधान बड़े डेटासेट के साथ अव्यवहारिक है। [डिएगो का जवाब] (http://stackoverflow.com/a/7452467/539560) बेहतर दिखता है लेकिन मुझे इसके बारे में निश्चित नहीं है ... – Xuni
+1 थोड़ी देर के लिए दस्तावेज़ों पर निराशाजनक रूप से घूरने के बाद मैंने अंततः थोड़ा सा एक (थोड़ा असंबंधित) लेकिन इस उत्तर को पढ़ने में बहुत उपयोगी एसीएल epiphany। उसके लिए धन्यवाद :) –