From bebe607d1db9b055a2daaf9596838e277046fb7f Mon Sep 17 00:00:00 2001 From: Khemissi Amir <amir.khemissi@insat.ucar.tn> Date: Thu, 2 Feb 2023 15:36:02 +0100 Subject: [PATCH] V3 Migrations: Optimized `Migrations::ExternalController::create_role` API. (#4720) --- .../api/v1/migrations/external_controller.rb | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/app/controllers/api/v1/migrations/external_controller.rb b/app/controllers/api/v1/migrations/external_controller.rb index 1eb4534e..22d3f204 100644 --- a/app/controllers/api/v1/migrations/external_controller.rb +++ b/app/controllers/api/v1/migrations/external_controller.rb @@ -39,13 +39,16 @@ module Api return render_data status: :created unless role_hash[:role_permissions].any? # Finds all the RolePermissions that need to be updated - role_permissions_temp = RolePermission.includes(:permission) - .where(role_id: role.id, 'permissions.name': role_hash[:role_permissions].keys) - .pluck(:id, :'permissions.name') - .to_h - # Re-structure the data so it is in the format: { <role_permission_id>: { value: <role_permission_new_value> } } - role_permissions = role_permissions_temp.transform_values { |v| { value: role_hash[:role_permissions][v.to_sym] } } - RolePermission.update!(role_permissions.keys, role_permissions.values) + role_permissions_joined = RolePermission.includes(:permission) + .where(role_id: role.id, 'permissions.name': role_hash[:role_permissions].keys) + + okay = true + role_permissions_joined.each do |role_permission| + permission_name = role_permission.permission.name + okay = false unless role_permission.update(value: role_hash[:role_permissions][permission_name]) + end + + return render_error status: :bad_request, errors: 'Something went wrong when migrating the role permissions.' unless okay render_data status: :created end @@ -159,7 +162,9 @@ module Api private def role_params - decrypted_params.require(:role).permit(:name, role_permissions: {}) + decrypted_params.require(:role).permit(:name, + role_permissions: %w[CreateRoom CanRecord ManageUsers ManageRoles ManageRooms ManageRecordings + ManageSiteSettings]) end def user_params -- GitLab