Changeset 730
- Timestamp:
- 11/19/07 15:53:16 (1 year ago)
- Files:
-
- trunk/db/migrate/009_create_customers.rb (modified) (2 diffs)
- trunk/db/migrate/011_create_settings.rb (modified) (2 diffs)
- trunk/db/temp_models.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/db/migrate/009_create_customers.rb
r710 r730 42 42 } 43 43 # Add action keys to keyring 44 keyring = get_admin_keyring 45 if keyring 46 puts "Adding action keys for '%s'" % keyring.name 47 new_keys.each { |key| keyring.grant(key) } 44 keyrings = get_admin_keyrings 45 unless keyrings.empty? 46 keyrings.each { |keyring| 47 puts "Adding action keys for '%s'" % keyring.name 48 new_keys.each { |key| keyring.grant(key) } 49 } 48 50 else 49 51 puts 'No administrative keyrings found for customer control actions!' 50 52 end 51 53 end … … 58 60 protected 59 61 60 def self.get_admin_keyring 61 keyrings = TempKeyring.find(:all, :order => 'id', :readonly => true) 62 puts '' 63 puts 'Choose a keyring where you want to add the new keys for the customer' 64 puts 'administering functions. You should choose your administrative keyring.' 65 66 if keyrings.empty? 67 puts 'No keyrings found!' 68 return nil 69 end 70 71 # Only one keyring -> return it 72 return keyrings.first if keyrings.length == 1 73 74 # More than one keyring: 75 puts 'Keyrings:' 76 keyrings.each do |k| 77 printf("%d %s\n", k.id, k.name) 78 end 79 keyring = nil 80 while !keyring 81 print 'Give ID: ' 82 keyring_id = $stdin.gets.to_i 83 keyring = keyrings.select { |k| k.id == keyring_id }.first 84 puts 'Invalid ID. Try again.' unless keyring 85 end 86 return keyring 62 def self.get_admin_keyrings 63 # Administrative 'user/*' action keys are required to configure customers. 64 required_keys = [ 65 'user/list', 66 'user/create', 67 'user/edit', 68 'user/remove', 69 'user/reset_password' 70 ] 71 return TempKeyring.find_all_with_keys(required_keys) 87 72 end 88 73 trunk/db/migrate/011_create_settings.rb
r721 r730 25 25 new_key = TempActionKey.create!(:name => 'setting/access_control') 26 26 27 get_admin_keyrings.each { |keyring| 28 puts "Adding the asset user rights system setting key for '%s'" % keyring.name 29 keyring.grant(new_key) 30 } 27 keyrings = get_admin_keyrings 28 unless keyrings.empty? 29 keyrings.each { |keyring| 30 puts "Adding the user rights system setting key for '%s'" % keyring.name 31 keyring.grant(new_key) 32 } 33 else 34 puts 'No administrative keyrings found for the user rights system settings!' 35 end 31 36 end 32 37 … … 49 54 'asset_permission/edit' 50 55 ] 51 required_keys = TempActionKey.find(:all, :conditions => ['name IN (?)', required_keys]) 52 unless required_keys.empty? 53 keyring_id_lists = required_keys.map { |key| 54 TempKeyring.connection.select_values('select keyring_id from action_keys_keyrings where action_key_id = %d' % key.id) 55 } 56 keyring_ids = keyring_id_lists.inject { |common_id_list, id_list| 57 common_id_list & id_list 58 } 59 else 60 return [] 61 end 62 63 return TempKeyring.find(keyring_ids) 56 return TempKeyring.find_all_with_keys(required_keys) 64 57 end 65 58 trunk/db/temp_models.rb
r645 r730 86 86 set_table_name 'keyrings' 87 87 88 # Finds all keyrings which have the given keys 89 def TempKeyring.find_all_with_keys(required_keys) 90 return [] if required_keys.empty? 91 92 # Find keyrings which have the required keys: 93 94 # First find the required keys. 95 required_keys = TempActionKey.find(:all, :conditions => ['name IN (?)', required_keys]) if required_keys.first.instance_of?(String) 96 97 # For each required key find ids of keyrings which have the key. 98 keyring_id_lists = required_keys.map { |key| 99 TempKeyring.connection.select_values('select keyring_id from action_keys_keyrings where action_key_id = %d' % key.id) 100 } 101 102 # Calculate the ids of keyrings which have all the required keys 103 # by taking an intersection of the id lists in keyring_id_lists. 104 keyring_ids = keyring_id_lists.inject { |common_id_list, id_list| 105 common_id_list & id_list 106 } 107 108 # Find the keyrings 109 return TempKeyring.find(keyring_ids) 110 end 111 88 112 def add_user(user) 89 113 self.class.connection.execute("INSERT INTO keyrings_users (keyring_id, user_id) VALUES (#{self.id}, #{user.id});")