scinote-web/app/controllers/access_permissions/experiments_controller.rb

61 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module AccessPermissions
class ExperimentsController < BaseController
before_action :set_project
def update
if permitted_params[:user_role_id] == 'reset'
parent_assignment = @project.public_send(:"#{assignment_type}_assignments").find_or_initialize_by(
"#{assignment_type}_id": permitted_params[:"#{assignment_type}_id"] || current_team.id,
team: current_team
)
@assignment.update!(
user_role_id: parent_assignment.user_role_id,
assigned_by: current_user,
assigned: :automatically
)
else
@assignment.update!(
user_role_id: permitted_params[:user_role_id],
assigned_by: current_user,
assigned: :manually
)
end
UserAssignments::PropagateAssignmentJob.perform_later(@assignment)
case assignment_type
when :team
log_activity(:experiment_access_changed_all_team_members, team: @assignment.team.id, role: @assignment.user_role.name)
when :user_group
log_activity(:experiment_access_changed_user_group, user_group: @assignment.user_group.id, role: @assignment.user_role.name)
when :user
log_activity(:change_user_role_on_experiment, user_target: @assignment.user.id, role: @assignment.user_role.name)
end
render json: { user_role_id: @assignment.user_role_id }, status: :ok
end
private
def set_project
@project = @model.project
end
def set_model
@model = Experiment.includes(user_assignments: %i(user user_role)).find_by(id: params[:id])
render_404 unless @model
end
def check_manage_permissions
render_403 unless can_manage_experiment_users?(@model)
end
def check_read_permissions
render_403 unless can_read_experiment?(@model)
end
end
end