Skip to content

Commit 220bc36

Browse files
committed
Implement shadow user creation in /v3/roles endpoint
1 parent 885f699 commit 220bc36

File tree

3 files changed

+395
-148
lines changed

3 files changed

+395
-148
lines changed

app/controllers/v3/roles_controller.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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
206221
end

0 commit comments

Comments
 (0)