2012-05-26 10 views
8

मैंने हाल ही में जेएसपी में एक टोमकैट वेब ऐप विकसित किया है जो कंपनी की सक्रिय निर्देशिका से जुड़ी घोषणात्मक सुरक्षा (server.xml/web.xml) का उपयोग करता है। मुझे नवाचारी परियोजना में जेएसएफ समर्थन जोड़ने के लिए कहा गया था। लॉगिन फॉर्म को जेएसएफ में परिवर्तित करना एक आसान मामला था, और सुरक्षा मॉडल अभी भी काम करता था।है (isUserInRole()) किसी जेएसएफ बटन पर उपयोगकर्ता अनुमति/सुरक्षा संलग्न करने का सबसे आसान तरीका है?

एक सहयोगी ने पूछा कि क्या मैं व्यापक दर्शकों को रिपोर्ट में से किसी एक को देखने की अनुमति दे सकता हूं, लेकिन केवल एक छोटे समूह के लिए कार्रवाई बटन प्रस्तुत करता हूं। जेएसएफ के लिए नया होने के नाते, मुझे कुछ शोध करना पड़ा।

मैंने "जेएसएफ बटन सुरक्षा" और "जेएसएफ बटन अनुमतियों" जैसी चार घंटों में गुस्से में बिताए और विभिन्न सुझावों का प्रयास किया जो ज्यादातर मृत समाप्त होते थे। एक और सहयोगी ने स्प्रिंग सुरक्षा मॉडल का उपयोग करने का सुझाव दिया था, लेकिन अगर ऐसा करने का कोई आसान तरीका था तो मैं वसंत पुस्तकालयों के पूरे समूह से निपटना नहीं चाहता था।

आखिरकार, मैंने जवाब पर ठोकर खाई, जो अविश्वसनीय रूप से सरल था। मुझे केवल यह निर्धारित करने के लिए HttpServletRequest विधि: isUserInRole() का उपयोग करने की आवश्यकता है कि वर्तमान में लॉग ऑन उपयोगकर्ता को एक्शन बटन देखने की अनुमति है या नहीं। मैंने पिछले दस वर्षों में HttpServletRequests का उपयोग किया है, लेकिन मुझे उस विधि के बारे में कभी भी याद नहीं है।

public boolean isUserInRole(String role) { 
    return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role)); 
} 

मेरे सवालों का विशेष रूप से कर रहे हैं:: JSF के साथ, यह है कि विधि को पाने के लिए एक सरल बात है, जैसा कि नीचे दिखाया है वहाँ इस दृष्टिकोण मैं के बारे में पता होना चाहिए के बारे में किसी भी gotchas हैं, और ऐसा करने के लिए एक और आसान तरीका है यह?

+2

इसे बैकिंग बीन की आवश्यकता के बिना ईएल में भी आसान किया जा सकता है: '# {request.isUserInRole ('foo')}' – BalusC

+0

लेकिन एक जेएसएफ प्रबंधित बीन में, आपको अनुरोध तक पहुंच नहीं होगी, सही? –

+0

मुझे बैकिंग बीन में शायद ही कभी इसकी आवश्यकता है। इसे दृश्य में 'rendered', 'readonly' या' अक्षम 'विशेषताओं पर रखें। – BalusC

उत्तर

1

यदि आप अपने जेएसएफ कार्यान्वयन में टॉमहॉक को एडन के रूप में उपयोग करते हैं तो अधिकांश नियंत्रणों में एक दृश्यऑनयूसररोल विशेषता होती है। आप मूल्य में कई भूमिका नामों का उपयोग कर सकते हैं।

+0

यह वास्तव में अच्छी जानकारी है, मुझे वास्तव में टॉमहॉक एडन के बारे में कुछ भी पता नहीं था, कुछ अच्छी चीजें दिखती हैं। एक प्रश्न, अगर मैं टॉमहॉक और प्राइमफेस का उपयोग करता हूं, तो क्या आपको लगता है कि मैं एक प्राइमफ़ेस नियंत्रण (उदा। पी: कमांड बटन) पर दृश्यऑनयूसररोल विशेषता जोड़ सकता हूं? –

+0

मैं इस लिंक के साथ प्राइमफेस और दृश्यऑनयूसररोल के बारे में अपने स्वयं के प्रश्न का उत्तर दे रहा हूं: http://cagataycivici.wordpress.com/2010/03/18/primefaces-el-extensions-for-ui-authorization/ –

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