@@ -114,7 +114,12 @@ def create_org_role(message)
114114 unauthorized! unless permission_queryer . can_write_to_active_org? ( org . id )
115115 suspended! unless permission_queryer . is_org_active? ( org . id )
116116
117- user_guid = message . user_guid || lookup_user_guid_in_uaa ( message . username , message . user_origin )
117+ if message . username && message . user_origin && message . user_origin != 'uaa' && org_managers_can_create_users?
118+ user = create_uaa_shadow_user ( message . username , message . user_origin )
119+ user_guid = user [ 'id' ]
120+ else
121+ user_guid = message . user_guid || lookup_user_guid_in_uaa ( message . username , message . user_origin )
122+ end
118123
119124 user = User . first ( guid : user_guid ) || create_cc_user ( user_guid )
120125
@@ -140,6 +145,12 @@ def create_cc_user(user_guid)
140145 UserCreate . new . create ( message :)
141146 end
142147
148+ def create_uaa_shadow_user ( username , origin )
149+ message = UserCreateMessage . new ( username :, origin :)
150+ unprocessable! ( message . errors . full_messages ) unless message . valid?
151+ User . create_uaa_shadow_user ( message . username , message . origin )
152+ end
153+
143154 def readable_users
144155 current_user . readable_users ( permission_queryer . can_read_globally? )
145156 end
@@ -203,4 +214,8 @@ def lookup_user_guid_in_uaa(username, given_origin, creating_space_role: false)
203214 def uaa_username_lookup_client
204215 CloudController ::DependencyLocator . instance . uaa_username_lookup_client
205216 end
217+
218+ def org_managers_can_create_users?
219+ VCAP ::CloudController ::Config . config . get ( :allow_user_creation_by_org_manager ) && FeatureFlag . raise_unless_enabled! ( :set_roles_by_username )
220+ end
206221end
0 commit comments