LDAP with sync rake task
This commit is contained in:
1 parent
7f05f21930
commit
d5a2de5476
23 files changed
+109
-40
No files matched your search
@@ -1,32 +1,73 @@
|
||||
# encoding: utf-8
|
||||
# require 'ruby-debug'
|
||||
|
||||
namespace :mid_site do
|
||||
attr_from_mid = %w{nccu_id psn_nam ut_chi_m eml_adr off_tel_ext sta_num}
|
||||
attr_from_mid = %w{nccu_id psn_nam ut_cod up_ut_cod eml_adr off_tel_ext sta_num}
|
||||
officer_posgrp_code = %w{02 06 10 05} #from RSS2
|
||||
admin_role = nil
|
||||
sub_role = nil
|
||||
|
||||
task :sync => :environment do
|
||||
users_from_mid = MID_CLIENT.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')})")
|
||||
info_profile = Info.first(conditions: {:key => 'profile'})
|
||||
|
||||
def find_or_create_sub_role(role,ut_query=[],key='')
|
||||
sub_role = role.sub_roles.get_sub_role_from_key(key)
|
||||
if sub_role.nil?
|
||||
ut_data = ut_query.find{|ut_data| ut_data["ut_cod"] == key }
|
||||
# debugger
|
||||
i18n_for_new_sub_role = I18nVariable.create!( :document_class => 'SubRole', :key => key, :en => (ut_data["ut_eng_m"] rescue ''), :zh_tw => (ut_data["ut_chi_m"] rescue ''), :parent_id => role.i18n_variable.id )
|
||||
sub_role = role.sub_roles.create!(:key => key)
|
||||
sub_role.i18n_variable = i18n_for_new_sub_role
|
||||
sub_role.save!
|
||||
p "Created SubRole(key: #{key}): EN: #{sub_role.i18n_variable.en}, CH: #{sub_role.i18n_variable.zh_tw} ParentRole(#{role.i18n_variable.key}): #{role.i18n_variable.en}"
|
||||
end
|
||||
sub_role
|
||||
end
|
||||
|
||||
users_from_mid = MID_CLIENT.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')})")
|
||||
ut_data_from_mid = MID_CLIENT.query("SELECT ut_odr, ut_cod, up_ut_cod, ut_chi_m, ut_eng_m FROM rss_paunit WHERE ut_tpe = '1' AND ut_grp != '3' AND up_ut_cod != 'F00' ORDER BY ut_odr, ut_cod")
|
||||
remote_list = users_from_mid.collect{|t| t["nccu_id"]}
|
||||
|
||||
#remove delete user sho has been deleted at remote first
|
||||
local_need_remove = User.all.collect{|t| t.nccu_id rescue nil}.uniq.delete_if {|x| x == nil} - remote_list
|
||||
desc "Going to delete User with IDs: #{local_need_remove.inspect}"
|
||||
local_need_remove.each{|user_id| (User.find user_id).destroy}
|
||||
desc "Deletion completed! \n"
|
||||
|
||||
#starting update user
|
||||
users_from_mid.each do |mid_user|
|
||||
local_user = User.find_or_initialize_by(:nccu_id => mid_user["nccu_id"])
|
||||
local_user.update_attributes(mid_user)
|
||||
desc "Updating and Newing Users"
|
||||
users_from_mid.each do |mid_user|
|
||||
ut_item = ut_data_from_mid.find{|ut_data| ut_data["ut_cod"] == mid_user["ut_cod"]}
|
||||
up_ut_item = ut_data_from_mid.find{|ut_data| ut_data["ut_cod"] == mid_user["up_ut_cod"] }
|
||||
local_user = User.find_or_initialize_by(:nccu_ldap_uid => mid_user["nccu_id"])
|
||||
AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[0].id, :key => 'first_name', :en => '', :zh_tw => (mid_user["psn_nam"].size <= 3? mid_user["psn_nam"][1..2]:mid_user["psn_nam"][2..-1]) )
|
||||
AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[1].id, :key => 'last_name', :en => '', :zh_tw => (mid_user["psn_nam"].size <= 3? mid_user["psn_nam"][0]:mid_user["psn_nam"][0..1]) )
|
||||
|
||||
user_model_mapper = Hash[:ut_cod => mid_user["ut_cod"] ,:up_ut_cod => mid_user["up_ut_cod"],:email => mid_user["eml_adr"],:off_tel_ext => mid_user["off_tel_ext"],:sta_num => mid_user["sta_num"]]
|
||||
user_model_mapper[:admin] = false
|
||||
local_user.update_attributes(user_model_mapper)
|
||||
|
||||
i18n_department_admin = I18nVariable.find_or_create_by( :document_class => 'Role', :key => 'department_admin', :en => 'Department Admin', :zh_tw => '系所使用者' )
|
||||
local_user.role = Role.find_or_create_by( :key => "department_admin",:build_in => true)
|
||||
local_user.role.i18n_variable = i18n_department_admin
|
||||
|
||||
|
||||
unless local_user.ut_cod == local_user.up_ut_cod #if the ut_cod has additions info for up ut
|
||||
local_user.sub_roles << find_or_create_sub_role(local_user.role,ut_data_from_mid,local_user.up_ut_cod)
|
||||
end
|
||||
|
||||
local_user.sub_roles << find_or_create_sub_role(local_user.role,ut_data_from_mid,local_user.ut_cod)
|
||||
|
||||
local_user.save!
|
||||
end
|
||||
end
|
||||
|
||||
task :install_admin => :before_instll_admin do
|
||||
admins_nccu_id = '2772'
|
||||
info_profile = Info.first(conditions: {:key => 'profile'})
|
||||
|
||||
# admin_role = Role.find_or_create_by( key: 'administrator')
|
||||
# sub_role = admin_role.sub_roles.find_or_create_by(:key => 'computer_center')
|
||||
info_profile = Info.first(conditions: {:key => 'profile'})
|
||||
|
||||
user_from_mid = MID_CLIENT.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')}) AND nccu_id = '#{admins_nccu_id}' limit 1")
|
||||
admin_at_mid = user_from_mid.first
|
||||
@@ -58,7 +99,7 @@ namespace :mid_site do
|
||||
local_user = User.find_or_initialize_by(:nccu_id => admin_at_mid["nccu_id"])
|
||||
local_user.update_attributes(:email => admin_at_mid["eml_adr"], :admin => true, :role_id => admin_role.id, :sub_role_ids => [sub_role.id])
|
||||
|
||||
AttributeValue.create( :user => local_user, :attribute_field => info_profile.attribute_fields[0], :key => 'first_name', :en => user_first_name, :zh_tw => user_first_name )
|
||||
AttributeValue.create( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[0].id, :key => 'first_name', :en => user_first_name, :zh_tw => user_first_name )
|
||||
AttributeValue.create( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[1].id, :key => 'last_name', :en => user_last_name, :zh_tw => user_last_name )
|
||||
|
||||
end
|
||||
@@ -95,6 +136,10 @@ namespace :mid_site do
|
||||
i18ns.each { |var| var.destroy }
|
||||
end
|
||||
|
||||
task :clean_ldap_users => :environment do
|
||||
User.where(:nccu_ldap_id.ne => nil ).each {|t| t.destroy}
|
||||
end
|
||||
|
||||
task :clean_admin_role_and_sub_role => :environment do
|
||||
data = Role.any_in( key: ['administrator','computer_center'])
|
||||
data.each { |var| var.destroy }
|
||||
|
||||
Reference in new issue
Block a user