mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-10 23:25:31 +08:00
61 lines
1.8 KiB
Ruby
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
|