class Ucert::CvmTracker
Class to handle CVM user account IDs
Attributes
cvm_2_ad_user[R]
cvm_role_report[RW]
Class constant variables
cvm_user_entitlement[R]
cvm_user_report[RW]
Class constant variables
file_user_map[RW]
Class constant variables
verbose[RW]
Class constant variables
Public Class Methods
new(params ={})
click to toggle source
Instance default variables
# File lib/ucert/cvm_tracker.rb, line 20 def initialize (params ={}) @verbose=params.fetch(:verbose, false) # CVM user entitlement report in XLSX format, generated by CVM export function @cvm_user_report = File.dirname(__FILE__)+"/../../data/cvm/cvm_user_list.xlsx" # CVM user role, which is mapped to YST data structure @cvm_role_report = File.dirname(__FILE__)+"/../../data/cvm/cvm_user_role.xlsx" # CVM user details entitlement report @cvm_func_report = File.dirname(__FILE__)+"/../../data/cvm/cvm_user_func.xlsx" # CVM to AD user map file @file_user_map = File.dirname(__FILE__)+"/../../data/cvm/cvm_user_map.txt" # Load the user map file to an instance variable (for performance gain) @cvm_2_ad_user=load_known_user_map_from_file(@file_user_map) # Load the user entitlement instance variable from the native CVM user entitlement reports @cvm_user_entitlement=parse_cvm_user_report(@cvm_user_report) parse_cvm_role_report(@cvm_role_report) parse_cvm_func_report(@cvm_func_report) # Insert DN field into the user entitlement data structure insert_dn save! end
Public Instance Methods
cvm_id_2_index(id)
click to toggle source
# File lib/ucert/cvm_tracker.rb, line 104 def cvm_id_2_index (id) @cvm_user_entitlement.each do |key,val| return key if val['用户编号'] == id.strip end return nil end
cvm_search_by_dn(dn)
click to toggle source
Search user entitlement record by AD DN
# File lib/ucert/cvm_tracker.rb, line 215 def cvm_search_by_dn (dn) begin puts "Perform search on the user entitlement record by AD DN: #{dn}" if @verbose @cvm_user_entitlement.each do |key, val| return val if @cvm_user_entitlement[key]['DN'].eql? dn end return nil rescue => ee puts "Exception on method #{__method__}: #{ee}" end end
Also aliased as: search_by_dn
parse_cvm_func_report(file)
click to toggle source
Parsing the CVM user function report in xlsx format
# File lib/ucert/cvm_tracker.rb, line 145 def parse_cvm_func_report (file) #begin workbook = RubyXL::Parser.parse(file) worksheet=workbook.worksheets.first func_entitlement=Hash.new worksheet.count.times do |row| puts "Parsing workbook row: #{row}" if @verbose # skip the 1st line of the file (header line) next if row == 0 func_entitlement = Hash.new func_entitlement['用户一事通ID'] = worksheet[row][0].value.to_s.strip unless worksheet[row].nil? func_entitlement['功能ID'] = worksheet[row][3].value.to_s.strip unless worksheet[row].nil? func_entitlement['功能名称'] = worksheet[row][4].value.to_s.strip unless worksheet[row].nil? func_entitlement['权限'] = worksheet[row][5].value.to_s.strip unless worksheet[row].nil? func_entitlement['增减方向'] = worksheet[row][6].value.to_s.strip unless worksheet[row].nil? func_entitlement['有效性'] = worksheet[row][7].value.to_s.strip unless worksheet[row].nil? func_entitlement['有效期开始时间'] = worksheet[row][8].value.to_s.strip unless worksheet[row].nil? func_entitlement['有效期结束时间'] = worksheet[row][9].value.to_s.strip unless worksheet[row].nil? func_entitlement['功能机构全称'] = worksheet[row][10].value.to_s.strip unless worksheet[row].nil? puts "Function: #{func_entitlement.inspect}" if @verbose unless func_entitlement['用户一事通ID'].nil? or func_entitlement['功能ID'].nil? user_index = cvm_id_2_index(func_entitlement['用户一事通ID']) puts "Insert function information into record: #{user_index}" if @verbose @cvm_user_entitlement[user_index]['funcs']=Array.new unless @cvm_user_entitlement[user_index]['funcs'] @cvm_user_entitlement[user_index]['funcs'].push(func_entitlement) end end return func_entitlement #rescue => ee #puts "Exception on method #{__method__}: #{ee}" #end end
print_user_entitlement()
click to toggle source
Print out the user entitlement table in plain text, to be imported into database
# File lib/ucert/cvm_tracker.rb, line 179 def print_user_entitlement #begin puts "user Entitlement Report in Plain-text Format" if @verbose @cvm_user_entitlement.first[1].each {|k,v| print k,"|"} if @verbose puts if @verbose @cvm_user_entitlement.values.map do |rec| rec.each {|k,v| print v,"|"} puts end #rescue => ee #puts "Exception on method #{__method__}: #{ee}" #end end
Also aliased as: print_user
save_cvm_user_map!(file=@file_user_map)
click to toggle source
Save the CVM to AD user mapping relation into the cache file
# File lib/ucert/cvm_tracker.rb, line 195 def save_cvm_user_map!(file=@file_user_map) puts "Saving the known Cvm to AD user mapping relationship to file: #{file} ..." if @verbose begin timestamp=Time.now f=File.open(file, 'w') f.write "# local Cvm to AD user map file created by the #{self.class} class #{__method__} method at: #{timestamp}" @cvm_user_entitlement.values.map do |record| key = record['用户编号'] value = record['DN'] f.write "\n#{key}|#{value}" end f.close puts "CVM to AD user map file is successfully saved to: #{file}" if @verbose rescue => ee puts "Exception on method #{__method__}: #{ee}" if @verbose end end
Also aliased as: save!
Private Instance Methods
insert_dn()
click to toggle source
add DN to the cvm_user_entitlement
record
# File lib/ucert/cvm_tracker.rb, line 89 def insert_dn puts "Insert DN into the record ..." if @verbose tracker = Ucert::YstTracker.new(:verbose => @verbose) @cvm_user_entitlement.each do |index, record| puts "Processing user record #{index}: #{record}" if @verbose key1=record['用户编号'] if @cvm_2_ad_user.key?(key1) && !@cvm_2_ad_user[key1].nil? @cvm_user_entitlement[index]['DN'] = @cvm_2_ad_user[record['用户编号']] else @cvm_user_entitlement[index]['DN'] = tracker.yst_id_2_dn(record['用户编号']) end end tracker=nil end
parse_cvm_role_report(file)
click to toggle source
Parsing the CVM role entitlement report in xlsx format
# File lib/ucert/cvm_tracker.rb, line 112 def parse_cvm_role_report (file) #begin workbook = RubyXL::Parser.parse(file) worksheet=workbook.worksheets.first role_entitlement=Hash.new worksheet.count.times do |row| puts "Parsing workbook row: #{row}" if @verbose # skip the 1st line of the file (header line) next if row == 0 role_entitlement = Hash.new role_entitlement['用户一事通ID'] = worksheet[row][0].value.to_s.strip unless worksheet[row].nil? role_entitlement['角色ID'] = worksheet[row][3].value.to_s.strip unless worksheet[row].nil? role_entitlement['角色名称'] = worksheet[row][4].value.to_s.strip unless worksheet[row].nil? role_entitlement['有效性'] = worksheet[row][5].value.to_s.strip unless worksheet[row].nil? role_entitlement['有效期开始时间'] = worksheet[row][6].value.to_s.strip unless worksheet[row].nil? role_entitlement['有效期结束时间'] = worksheet[row][7].value.to_s.strip unless worksheet[row].nil? role_entitlement['角色机构全称'] = worksheet[row][8].value.to_s.strip unless worksheet[row].nil? role_entitlement['是否展开'] = worksheet[row][9].value.to_s.strip unless worksheet[row].nil? puts "Role: #{role_entitlement.inspect}" if @verbose unless role_entitlement['用户一事通ID'].nil? or role_entitlement['角色ID'].nil? user_index = cvm_id_2_index(role_entitlement['用户一事通ID']) puts "Insert roles information into record: #{user_index}" if @verbose @cvm_user_entitlement[user_index]['roles']=Array.new unless @cvm_user_entitlement[user_index]['roles'] @cvm_user_entitlement[user_index]['roles'].push(role_entitlement) end end return role_entitlement #rescue => ee #puts "Exception on method #{__method__}: #{ee}" #end end
parse_cvm_user_report(file)
click to toggle source
Parsing the Cvm user entitlement report in CSV format
# File lib/ucert/cvm_tracker.rb, line 43 def parse_cvm_user_report (file) #begin puts "Start parsing Excel workbook file: #{file}" if @verbose cvm_user_entitlement=Hash.new workbook = RubyXL::Parser.parse(file) worksheet=workbook.worksheets.first row_cnt=0 header=Array.new user_index=0 worksheet.count.times do |row| row_cnt+=1 puts "Parsing workbook row: #{row_cnt}" if @verbose entry=Array.new # Processing Header Row if row_cnt==1 0.upto(worksheet[row].size) do |col| if worksheet[row][col].nil? header.push(nil) else header.push(worksheet[row][col].value.to_s) end end next else 0.upto(worksheet[row].size) do |col| if worksheet[row][col].nil? entry.push(nil) else entry.push(worksheet[row][col].value.to_s.strip) end end user_index += 1 end record = header.zip(entry).to_h.reject {|k,v| k.nil?} puts "User record: #{record}" if @verbose next if record["用户编号"].empty? cvm_user_entitlement[user_index] = record unless cvm_user_entitlement.key?(user_index) end workbook=nil return cvm_user_entitlement #rescue => ee #puts "Exception on method #{__method__}: #{ee}" #end end