2011-06-16 12 views
5

मुझे कई उपयोगकर्ताओं के लिए एक संग्रह को डिज़ाइन और निर्माण करने के बारे में कोई दस्तावेज शायद ही मिल सकता है।जैकबैबिट उपयोगकर्ता प्रबंधन

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

अब मुझे एक रिपोजिटरी चाहिए जो हजारों उपयोगकर्ताओं द्वारा साझा की जाती है और प्रत्येक उपयोगकर्ता अपने नोड्स के साथ काम करता है और दूसरों को अनुमति नहीं देता है।

SimpleAccessManager काफी सरल है:

public boolean isGranted(ItemId id, int permissions) throws RepositoryException { 
    checkInitialized(); 
    if (system) { 
     // system has always all permissions 
     return true; 
    } else if (anonymous) { 
     // anonymous is always denied WRITE & REMOVE permissions 
     if ((permissions & WRITE) == WRITE 
       || (permissions & REMOVE) == REMOVE) { 
      return false; 
     } 
    } 

    return true; 
} 

ऐसा लगता है कि एक SimpleLoginModule और SimpleAccessManager साथ इस तरह के एक बहु-उपयोगकर्ता भंडार नहीं बना सकते। क्योंकि यह केवल व्यवस्थापक और अनाम उपयोगकर्ताओं है कि सब कुछ पढ़ सकते हैं लेकिन नहीं लिख सकते हैं बीच अंतर ...

तो यह है कि एक DefaultAccessManager का उपयोग करें और शायद करने के लिए है कुछ इस तरह करते हैं:

Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 

UserManager um = ((JackrabbitSession) session).getUserManager(); 
User user = um.createUser("john", "doe"); 

/* And assign some ALC as follows... And then play with it like this, which really sucks without proper documentation, one has to reverse engineer everything, wtf */ 

AccessControlManager acm = session.getAccessControlManager();  
AccessControlPolicyIterator it = acm.getApplicablePolicies(testRootNode.getPath()); 
while (it.hasNext()) { 
    AccessControlPolicy acp = it.nextAccessControlPolicy(); 

    Privilege[] privileges = new Privilege[]{acm.privilegeFromName(Privilege.JCR_WRITE)}; 

    ((AccessControlList)acp).addAccessControlEntry(new PrincipalImpl(user.getUserID()), privileges); 

    acm.setPolicy(testRootNode.getPath(), acp); 
} 

भंडार के माध्यम से सुलभ हो जाएगा ओपनसीएमआईएस जो ग्राहक से उपयोगकर्ता प्रमाण-पत्र प्रदान करता है।

संपादित करें: यह है कि क्या मैं, AccessControl

+2

असल में विक्टर यह इसलिए है क्योंकि जैकबब्बी जावा सामग्री रिपोजिटरी का कार्यान्वयन है - जो एक विनिर्देश है। जेसीआर ... जैकबब्बीट .... इसे प्राप्त करें? – MJB

उत्तर

0

प्रलेखन से लिए देख रहा था

सुरक्षा विन्यास तत्व भंडार

के लिए प्रमाणीकरण और प्राधिकरण सेटिंग निर्दिष्ट करने का इस्तेमाल किया जाता है अधिक जानकारी के लिए

JackRabbit Security configuration docs देखें।

+0

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

+0

यह मेरे प्रश्न का उत्तर नहीं देता है।असल में मैं इसे कल पढ़ रहा था, यह सिर्फ इतना कहता है कि लॉग इन मॉड्यूल ऑथ का ख्याल रखता है और एक्सेसमैनेजर एसीएल का ख्याल रखता है ... – lisak

2

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

आप हिप्पो सीएमएस here के सुरक्षा भाग का स्रोत पा सकते हैं।

+0

मुझे शायद ही कभी जैकबैबिट पता है, मैं इसे शुरुआत के लिए जेआर के साथ लागू करने वाला हूं, इसके अलावा यह प्रोजेक्ट ज्यादातर दस्तावेज़/किसी भी यूआई के बिना मेटाडाटा सीआरयूडी, इसलिए हिप्पो एक अच्छा विकल्प नहीं होगा। लेकिन मैं हिप्पो के साथ खेलने के लिए कुछ खाली समय लेने की कोशिश कर रहा हूं, खासकर हिप्पो पोर्टल के कारण, मैं कुछ वर्षों से लिफ़ेरे पर विकास कर रहा हूं, ताकि हिप्पो + जेटस्पेड 2 मेरे लिए बहुत अच्छा लगे – lisak

2

यदि आपको "हजारों उपयोगकर्ताओं" के साथ एक भंडार की आवश्यकता है तो आप जेएएएस लॉगिन मॉड्यूल का उपयोग कर बेहतर हैं जो कुछ बाहरी सिस्टम (एलडीएपी या डेटाबेस इत्यादि) के आधार पर उपयोगकर्ताओं को प्रमाणित करता है और भूमिका देता है। वर्कस्पेस नाम और वैकल्पिक क्रेडेंशियल्स का उपयोग करते हुए आप रिपॉजिटरी में लॉगिन करते समय एक सत्र वापस कर दिया जाता है। और जैसा कि आप यहां से देख सकते हैं: http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Session.html सत्र केवल उन नोड्स को उजागर करता है जिनके लिए उपयोगकर्ता तक पहुंच है।

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

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