2012-03-05 20 views
12

चिह्नित विशिष्ट रिकॉर्ड के लिए तैयार प्राधिकरण को बाईपास करने का सबसे अच्छा तरीका क्या है I रेलवे 3.2 प्रोजेक्ट में तैयार और कैनकन का उपयोग कर रहा हूं। मेरे पास ईवेंट बूलियन ध्वज सार्वजनिक के साथ मॉडल है। घटना के रूप में चिह्नित है, तो सार्वजनिक => true तो मैं किसी को भी, नहीं प्रवेश कर जाएंगे या चाहते हैं कि उसे सार्वजनिक => झूठी तो एक श्रृंखला के रूप में चिह्नित है तोसार्वजनिक

GET /events/:id 

साथ रिकॉर्ड तक पहुँचने के लिए सक्षम होने के लिए कैनकन क्षमताओं का प्राधिकरण और उपर्युक्त संसाधन तक पहुंच का निर्णय लेगा।

इसे प्राप्त करने के लिए सबसे अच्छा पैटर्न क्या है?

उत्तर

21

आप प्रमाणीकरण_यूसर को छोड़कर ऐसा कर सकते हैं! आपके पास यह तर्क है कि

skip_before_filter :authenticate_user!, :only => :show, :if => lambda { 
    if params[:id] 
     @event = Event.find(params[:id]) 
     @event and @event.public? 
    else 
     false 
    end 
    } 
+0

असल में पैरामीटर संसाधन में एक फ़ील्ड है लेकिन अब मैं इसके बारे में सोचता हूं कि मैं लैम्ब्डा में संसाधन लोड कर सकता हूं और फ़ील्ड की जांच कर सकता हूं। – bradgonesurfing

+0

पैराम्स [: id] संसाधन पहचानकर्ता है और यदि संसाधन को सार्वजनिक रूप से चिह्नित किया गया है तो प्रमाणीकरण की आवश्यकता नहीं है। क्या आप एक और तरीका सुझा सकते हैं? – bradgonesurfing

+0

यह समाधान बहिष्कृत किया जा रहा है। इसे जांचें: https://github.com/rails/rails/issues/9703। – Spyros

-2

नहीं, प्रमाणीकरण को न छोड़ें। आप प्रमाणीकरण छोड़ना चाहते हैं। एक बेहतर समाधान सार्वजनिक => सत्य के साथ घटनाओं को स्पष्ट रूप से अधिकृत करना होगा।

अपने कैनकैन क्षमता वर्ग में:

can :read, Event do |e| 
    some_other_authorization_boolean || e.public? 
end 

इस क्षमता सभी उपयोगकर्ताओं के लिए दिया जाएगा; यहां तक ​​कि जो लोग लॉग इन नहीं हैं।

+5

यदि आप प्रमाणीकरण को छोड़ नहीं देते हैं तो आपको साइन अप स्क्रीन पर वापस फेंक दिया जाता है। कैंसर प्रमाणीकरण केवल ** होता है ** ** प्रमाणीकरण प्रमाणीकरण के बाद फ़िल्टर श्रृंखला को रद्द करने का मौका मिला है। – bradgonesurfing

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