diff --git a/app/controllers/api/v1/migrations/external_controller.rb b/app/controllers/api/v1/migrations/external_controller.rb index 1eb4534e8112fe0451fd7a21decc5d4344c5be2b..22d3f204c0166d0eaf9cac230cd44f49ef099477 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