devise / cancan / deviseldap / rolify में भूमिका निभाने और ldap_param_value का उपयोग - रूबी, रूबी-ऑन-रेल -3, devise, ldap, cancan

नीचे पंक्ति ऊपर सामने: जब उपयोगकर्ता लॉग इन करता है तो मैं तुरंत ldap से भूमिका कैसे दे सकता हूं

मैं उपयोगकर्ताओं को प्रमाणित करने के लिए devise / cancan / deviseldap / rolify का उपयोग कर रहा हूं और फिर उम्मीद है कि एक भूमिका असाइन करें। मैं करीब हूँ मुझे लगता है यह काम करने के लिए। मेरे पास एक कस्टम इनिशियलाइज़र है जो उपयोगकर्ता को ऐप में केवल तभी जाने देता है, जब उनके पास अपनी ldap प्रविष्टि में एक निश्चित सदस्य है।

यह इस धागे में व्यक्ति से अनुग्रह मदद के लिए धन्यवाद:

रनटाइम पर समूहों की जाँच करें devise_ldap_authenticatable

इसलिए अब मेरे लिए भूमिकाएँ सौंपने का समय आ गया हैनेट पर इधर-उधर ट्रोल करना मुझे लगा कि डेविस से user.rb में after_create सबसे अच्छा तरीका है। मेरे पास इन सदस्‍यों का कॉन्‍फ़िगर / इनिशियलाइज़र है, लेकिन बाद में इनकी पहुँच नहीं पा सकते user.rb निम्नलिखित के रूप में वर्णित है जो मैंने प्रयास किया user.rb:

 class User < ActiveRecord::Base
after_create :assign_role
...
...
private
def assign_role
puts "Assigning role!"
member_of = self.ldap_param_value("memberOf")  #get array #i know self here is wrong
member_of.each do |str|
if str.include? "Help Desk Admin"
self.roles << "admin"
end
if str.include? "Password Manager"
self.roles << "password_manager"
end
if str.include? "Security"
self.roles << "security"
end
if str.include? "Help Desk"
self.roles << "help_desk"
end
end

puts "roles assigned!"
self.update
end

सबसे बड़ी समस्या (कई हैं जो मैं अभी भी हूँमाणिक नोबि) यह है कि मेरे पास एक तरीका है ldap_param_value को कॉल करें और मुझे पता है कि इसे स्वयं पर कॉल करना सही नहीं है, मुझे यह कोड कॉन्फ़िगर / इनिशियलाइज़र / customdevise.rb में एक ही लाइन काम कर रहा है (यह मेरे सामने के गेट के लिए सभी चेक पकड़ है ): (मुझे पता है कि मुझे ऊपर ldap_param_value तक पहुंचने के लिए सही वस्तु की आवश्यकता है, लेकिन यह निश्चित नहीं है कि यह क्या है)। मैंने सोचा था कि स्वयं था: Devise :: LdapAdapter, लेकिन मैंने कोशिश की कि ऊपर और यह अभी भी "t काम:"

Devise::LdapAdapter.ldap_param_value(...)

पूर्णता के लिए मेरी config/initializer/customedevise.rb

Devise::LdapAdapter::LdapConnect.class_eval do
def user_group_test
member_of = self.ldap_param_value("memberOf") #self works here...
checkgroups member_of # your group test method  end

def checkgroups(members)
retVal = false
members.each do |str|
if str.include? "Help Desk Admin" or str.include? "Password Manager" or  str.include? "Security" or str.include? "Help Desk"
retVal = true;
end
end
return retVal
end
#    "CN=Password Manager"
#    "CN=Help Desk"
#    "CN=Help Desk Admin"
#    "CN=Security"


def authorized?
DeviseLdapAuthenticatable::Logger.send("Authorizing user #{dn}")
if !user_group_test
DeviseLdapAuthenticatable::Logger.send("Not authorized because custom authentication failed.")
return false
elsif !authenticated?
DeviseLdapAuthenticatable::Logger.send("Not authorized because not authenticated.")
return false
elsif !in_required_groups?
DeviseLdapAuthenticatable::Logger.send("Not authorized because not in required groups.")
return false
elsif !has_required_attribute?
DeviseLdapAuthenticatable::Logger.send("Not authorized because does not have required attribute.")
return false
else
return true
end
end
end

नोट: ऊपर एक और दोष यह है कि वसीयत को ठीक से पता नहीं है कि प्रमाणीकरण विफल क्यों हुआ ... मैं इससे पीड़ित हूं और इसे बदल दिया है devise.en.yml फ़ाइलें invalid: अधिक जानकारी शामिल करने के लिए:

en:
devise:
confirmations:
confirmed: "Your account was successfully confirmed. You are now signed in."
send_instructions: "You will receive an email with instructions about how to confirm your account in a few minutes."
send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions about how to confirm your account in a few minutes."
failure:
already_authenticated: "You are already signed in."
inactive: "Your account was not activated yet."
invalid: "Invalid email or password.  Or not a member of the correct group"

..etc...

उत्तर:

उत्तर № 1 के लिए 1

यह सरल है,

  1. एक तालिका अनुमतियों में सभी मॉडल और क्रियाएं होंगी जो उपयोगकर्ताओं द्वारा निष्पादित की जा सकती हैं।
  2. अनुमतियाँ HABTM उपयोगकर्ता और उपयोगकर्ता HABTM अनुमतियाँ
  3. रोल्स has_many उपयोगकर्ता, उपयोगकर्ता अंतर्गत आता है भूमिका
  4. भूमिकाएँ HABTM अनुमतियाँ और अनुमतियाँ HABTM भूमिकाएँ
  5. यदि आप उपरोक्त सभी संघों की स्थापना करते हैं औरcurrent_user id के आधार पर, आप उपयोगकर्ता की भूमिका को पुनः प्राप्त कर सकते हैं और उनकी अनुमतियाँ पुनः प्राप्त कर सकते हैं और उन अनुमतियों को निम्नलिखित विधि द्वारा योग्यता वर्ग में तत्काल दिया जाएगा

         def initialize(user)
    user.role.permissions.each do |permission|
    if permission.subject_class == "all"
    can permission.action.to_sym, permission.subject_class.to_sym
    else
    can permission.action.to_sym, permission.subject_class.constantize
    end
    end
    end
    

यह लिंक दिखाता है कि यह कैसे करना है,

http://blog.joshsoftware.com/2012/10/23/dynamic-roles-and-permissions-using-cancan/


संबंधित सवाल
सबसे लोकप्रिय