2010-04-29 17 views
7

मैं एक परियोजना पर काम कर रहा हूं जिसमें स्प्रिंग सिक्योरिटी एसीएल शामिल है और मैं BasePermission.CREATE बनाने की अनुमति में आया हूं। क्या कोई कृपया बताएगा कि यह कैसे काम करना चाहिए या यह किसी को क्या करने की अनुमति देता है?क्या कोई स्प्रिंग सिक्योरिटी बेसप्रमिशन समझा सकता है। तैयार करें?

यह मेरी समझ है कि प्रत्येक ऑब्जेक्ट में एसीएल है, और प्रत्येक एसीएल में कई एसी हैं, और प्रत्येक एसी के पास एक सिड और अनुमति है। इसे किसी ऑब्जेक्ट पर बनाने के लिए अनुमति कैसे दे सकती है, अगर इसे एसीएल संलग्न करने के लिए बनाया जाना चाहिए?

उत्तर

7

स्प्रिंग सुरक्षा ObjectIdentity इंटरफ़ेस के माध्यम से अप्रत्यक्ष रूप से डोमेन ऑब्जेक्ट्स पर अनुदान अनुमति देता है।

तुम उल्लेख के रूप में, अब तक सामान्य मामला है कि आप बना सकते हैं या पहले डोमेन वस्तु प्राप्त है, और फिर डोमेन वस्तु के लिए एक ObjectIdentityImpl का निर्माण है:

MyDomainObject secured = new MyDomainObject(); 
ObjectIdentity securedIdentity = new ObjectIdentityImpl(secured); 

फिर आप पुनः प्राप्त करने के ObjectIdentity उदाहरण का उपयोग वसंत सुरक्षा ढांचे का उपयोग कर एसीएल।

हालांकि, ऑब्जेक्ट पहचान का उपयोग करने का यह एकमात्र तरीका नहीं है। आप वस्तु के संदर्भ को पारित कर सकते हैं जो वास्तविक व्यापार वस्तु नहीं है, लेकिन इसे बनाए जाने के कुछ साधन हैं, अगर इसे बनाया गया हो।

उदाहरण के लिए, कल्पना करें कि हम फ़ाइलों को सुरक्षित करना चाहते हैं। हम java.io.File उदाहरण के साथ ऑब्जेक्टइटीटीटी बना सकते हैं जिसे सुरक्षित किया जा रहा है। File ऑब्जेक्ट जो पहचान में है केवल फ़ाइल का संदर्भ है - यह वास्तविक फ़ाइल नहीं है - फ़ाइल भी मौजूद नहीं हो सकती है, फिर भी हमारे पास ऑब्जेक्ट इडेंटिटी है जिसे हम सुरक्षा के बारे में कारण बता सकते हैं और एसीएल प्राप्त कर सकते हैं।

यह पैटर्न किसी भी प्रकार की डोमेन ऑब्जेक्ट पर लागू किया जा सकता है। DomainObjectPrototype कार्यान्वयन बनाएं जो डोमेन ऑब्जेक्ट को सुरक्षित करने के लिए आवश्यक डोमेन सुविधाओं के संदर्भ में वर्णन करता है, लेकिन वास्तव में डोमेन ऑब्जेक्ट के संदर्भ की आवश्यकता नहीं है। आप इस डोमेन ऑब्जेक्ट को वास्तव में बनाने के लिए कुछ सेवा के लिए जरूरी विवरण के रूप में सोच सकते हैं।

पुनश्च: चलो मुझे कबूल है कि मैं वसंत सुरक्षा उपयोग नहीं किया है, लेकिन डिजाइन पैटर्न बहुत एक example देखने के बाद मेरे लिए स्पष्ट लगता है।

संपादित करें: मैंने इसे स्पष्ट रूप से स्पष्ट करने के लिए अपडेट किया है - जैसा कि मैंने मूल रूप से लिखा था, वस्तु वस्तु के कार्यान्वयन को जरूरी नहीं है।

+1

आपकी प्रतिक्रिया के लिए धन्यवाद। हालांकि मैं स्पष्ट करना चाहता हूं। क्या आपका मतलब है कि अगर मैं विजेट क्लास के निर्माण को प्रतिबंधित करना चाहता हूं, तो मैं निम्न की तरह कुछ कर सकता हूं? ऑब्जेक्ट इडेंटिटी सुरक्षित IDentity = new ObjectIdentityImpl (Widget.class, विजेट।RESERVED_CLASS_ID); मैं तब जांच करूंगा कि कुछ सिड को बनाने की अनुमति की अनुमति है या नहीं। –

+1

जब एक्सेस नियंत्रण विजेट क्लास के विशिष्ट उदाहरणों पर निर्भर नहीं है, तो आप ऐसा कर सकते हैं। यदि आपको इंस्टेंस-विशिष्ट नियंत्रण की आवश्यकता है, तो विजेटप्रोटोटाइप क्लास बनाएं जिसमें एक्सेस नियंत्रण को परिभाषित करने के लिए आवश्यक डोमेन विशेषताएँ शामिल हों। – mdma

0

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

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

+0

मैं CREATE अनुमति की आवश्यकता को समझता हूं। मेरा सवाल यह था कि विशेष रूप से वसंत सुरक्षा में इसका उपयोग कैसे करें। फिर भी आपका धन्यवाद। –

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