दिलचस्प पोस्ट
प्रोग्रामेटिक रूप से प्रवेश द्वार और सबनेट मुखौटा विवरण प्राप्त करना जावास्क्रिप्ट में स्कोप चेन JSF वेब एप्लिकेशन पर वापस बटन से बचें आगे बढ़े मापदंडों के साथ वसंत? सबवर्जन: एक फ़ाइल में स्थानीय संशोधनों को प्रतिबंधित किया जा रहा है? रूबी MYSQL2 मणि ​​विंडोज 7 पर स्थापना गणना (*) बनाम गणना (1) ओपनग्ल पिक्सेल परिपूर्ण 2 डी ड्राइंग जावा 2 डी ग्राफिक्स छवि को। PNG फ़ाइल के रूप में सहेज रहा है सी ++: तर्क "संदर्भ द्वारा पारित" पास करना तृतीय-पक्ष पुस्तकालयों का उपयोग किए बिना PHP में छवियों का आकार बदलना चाहते हैं? PHP परियोजनाओं के लिए एक तैनाती / बिल्ड / सीआई चक्र सेट करना कुंजी 'अक्का। संस्करण' के लिए कोई कॉन्फ़िगरेशन सेटिंग नहीं मिली Node.js, फ़ाइलें नहीं खोल सकता त्रुटि: ENOENT, stat './path/to/file' कैसे बदलते स्थान के साथ अपडेट, एंड्रॉइड, एंड्रॉइड जैसे ड्रैगएबल मैप को लागू करने के लिए

मैं एक उपयोगकर्ता के घर (रूट) पथ को अपनी भूमिका के आधार पर डेवलसेव का उपयोग कैसे कर सकता हूं?

मैं एक प्रोजेक्ट मैनेजमेंट एप पर काम कर रहा हूं, और ऐप में, मेरे पास प्रोजेक्ट_मैनेजर और क्लाइंट हैं I मैं प्रमाणीकरण / प्राधिकरण के लिए Devise और CanCan का उपयोग कर रहा हूँ

प्रवेश के बाद कौन सा बिंदु पर उपयोगकर्ता को अपने विशिष्ट नियंत्रक / लेआउट / दृश्यों पर पुनर्निर्देशित करना चाहिए? क्या current_user.role में current_user.role जांच करने के लिए कोई तरीका है और रूट (या रीडायरेक्ट) सेट पर आधारित है या नहीं वे एक प्रोजेक्ट मैनेजर या ग्राहक हैं या नहीं? क्या यह एक बदलाव है जिसे मैं कहीं में भला कर सकता हूं?

किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद! –निशान

Solutions Collecting From Web of "मैं एक उपयोगकर्ता के घर (रूट) पथ को अपनी भूमिका के आधार पर डेवलसेव का उपयोग कैसे कर सकता हूं?"

आपके routes.rb फाइल में उपयोगकर्ता के पास कोई भूमिका नहीं होगी, इसलिए आप विशिष्ट रूट मार्गों को निर्दिष्ट करने के लिए इसका उपयोग नहीं कर पाएंगे।

आप क्या कर सकते हैं एक नियंत्रक (उदाहरण के लिए, passthrough_controller.rb ) सेट कर दिया जाता है, जो बदले में भूमिका और रीडायरेक्ट को पढ़ सकता है। कुछ इस तरह:

 # passthrough_controller.rb class PassthroughController < ApplicationController def index path = case current_user.role when 'project_manager' some_path when 'client' some_other_path else # If you want to raise an exception or have a default root for users without roles end redirect_to path end end # routes.rb root :to => 'passthrough#index' 

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

सबसे सरल उपाय lambda का उपयोग करना है:

 root :to => 'project_managers#index', :constraints => lambda { |request| request.env['warden'].user.role == 'project_manager' } root :to => 'clients#index' 

एक अन्य विकल्प authenticated तरीके से एक proc को इस तरह से पारित करना है (मैं इस उदाहरण में क्रांति का उपयोग कर रहा हूं):

 authenticated :user, ->(u) { u.has_role?(:manager) } do root to: "managers#index", as: :manager_root end authenticated :user, ->(u) { u.has_role?(:employee) } do root to: "employees#index", as: :employee_root end root to: "landing_page#index" 

ध्यान दें कि रेल 4 में आपको प्रत्येक रूट रूट के लिए एक अद्वितीय नाम निर्दिष्ट करना होगा, विवरण के लिए यह समस्या देखें।

मैं ऐसा एक रेल 3 एप में करता हूं जो वार्डन का उपयोग करता है। चूंकि Devise वार्डन के शीर्ष पर बनाया गया है, मुझे लगता है कि यह आपके लिए काम करेगा, लेकिन इस पर निर्भर होने से पहले इसे थोड़ा सा प्रयोग करना सुनिश्चित करें।

 class ProjectManagerChecker def self.matches?(request) request.env['warden'].user.role == 'project_manager' end end # routes.rb get '/' => 'project_managers#index', :constraints => ProjectManagerChecker get '/' => 'clients#index' 

अगर उपयोगकर्ता की भूमिका "प्रोजेक्ट_ व्यवस्थापक" है तो प्रोजेक्ट मैनेजर कंट्रोलर का उपयोग किया जाएगा – यदि यह ग्राहक नहीं है तो नियंत्रक का उपयोग किया जाएगा। यदि वे सभी में लॉग इन नहीं हैं, तो env['warden'].user शून्य होगा और आपको एक त्रुटि मिल जाएगी, इसलिए आप शायद उस के आसपास काम करना चाहेंगे, लेकिन यह आपको आरंभ करना होगा।

कार्यान्वयन के साथ ब्लॉग पोस्ट http://minhajuddin.com/2011/10/24/how-to-change-the-rails-root-url-based-on-the-user-or-role/