2008-12-08 11 views
5

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

मुझे ऐसा कुछ चाहिए जो ActiveRecord # के एक स्कोप्ड संस्करण प्रदान करता है जो केवल उन चीज़ों को पाता है जो वर्तमान उपयोगकर्ता को देखने की अनुमति है। यह कहना पर्याप्त मजबूत होना चाहिए, आप केवल उन चित्रों को देख सकते हैं जो गैलरी में हैं जो आपके स्वामित्व में हैं या आपके एक मित्र हैं।

बोनस के रूप में, यह बनाता है या अपडेट (पहले_ * या सत्यापन चरण में) को रोक सकता है कि आपके पास प्रदर्शन करने का अधिकार नहीं है, जिसमें एक अलग उपयोगकर्ता या गैलरी के साथ अपने रिकॉर्ड जोड़ना, या ऐसे रिकॉर्ड बनाना शामिल है ।

उत्तर

0

पीछे की ओर, मैं सिर्फ Hobo पैटर्न का उपयोग करूंगा। यह सबसे सरल और सबसे लचीला है।

0

आप lockdown देख सकते हैं। मैंने अभी तक परियोजना पर इसे लागू नहीं किया है, लेकिन यह आपको कुछ काम बचा सकता है।

3

आप declarative_authorization प्लगइन के साथ मॉडल स्तर पर कुछ वास्तव में जटिल प्राधिकरण चालें कर सकते हैं। फिर भी, मैं खुद को rails-authorization-plugin पसंद करता हूं - इस के साथ आप मॉडल स्तर पर भूमिकाओं को परिभाषित करते हैं (उदाहरण के लिए। कोई संसाधन का स्वामी है) और नियंत्रक स्तर पर अनुमतियां (उदाहरण के लिए केवल संसाधन या व्यवस्थापक का स्वामी ही प्राप्त कर सकता है संसाधन)। मुझे यह दृष्टिकोण अधिक संक्षिप्त लगता है, खासकर यदि आप एक स्वच्छ REST दृष्टिकोण के लिए पीछा कर रहे हैं। आप इस तरह अनुरोध है, तो:

GET /posts 

क्या तुम सच में लौटना चाहिए सभी पोस्ट ही नहीं, वर्तमान उपयोगकर्ता के पदों है। उस उद्देश्य के लिए आप एक अलग रास्ता होना चाहिए:

GET /users/:user_id/posts 

जहां: user_id वर्तमान उपयोगकर्ता के आईडी को तैयार है। यह अंतर तो उचित कार्रवाई में नजर आता जाना चाहिए:

def index 
    user = User.find(params[:user_id]) unless params[:user_id].blank? 
    @posts = 
    if user 
    # get all posts of a user 
    user.posts.all 
    else 
    # get all posts 
    Post.all 
    end 
end 

अब, आप वास्तव में यहाँ क्या दो प्राधिकरण संदर्भों कर रहे हैं - "एक उपयोगकर्ता के सभी पोस्ट प्राप्त" और "सभी पोस्ट प्राप्त" और आप आमतौर पर करना चाहते हैं दोनों के लिए अलग-अलग अनुमतियां सेट करें (उदाहरण के लिए। "केवल व्यवस्थापक ही सभी पोस्ट प्राप्त कर सकते हैं" और "केवल उपयोगकर्ता ही स्वयं या व्यवस्थापक उपयोगकर्ता के सभी पोस्ट प्राप्त कर सकते हैं")।

+0

मैं rethful_authentication और रेल-औथ प्लगइन के संयोजन का उपयोग करता हूं। रेल एथ बहुत शक्तिशाली है, और आपकी अनुमतियों का वर्णन करने के लिए एक पूर्ण डीएसएल प्रदान करता है। –

+0

यह restful_ प्रमाणीकरण है, ज़ाहिर है: पी –

1

मेरे पास एक मणि है जो पूरी तरह से उनकी भूमिका के आधार पर वस्तुओं के लिए अनुमति निर्दिष्ट करने में सक्षम होने के बारे में है। आप यहां एक नज़र डाल सकते हैं: http://github.com/nakajima/roleful/tree/master। यह आपके द्वारा संकेतित before_filter दृष्टिकोण के लिए अच्छी तरह से काम करेगा।

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

def index 
    @posts = user_repo.posts 
end 

private 

def user_repo 
    # find_by_id is **much** faster than regular find, 
    # plus it just returns nil when there's no record 
    if user = User.find_by_id(params[:user_id]) 
    # returns the association proxy 
    user.posts 
    else 
    # returns the class 
    User 
    end 
end 
संबंधित मुद्दे