diff --git a/app/controllers/components_controller.rb b/app/controllers/components_controller.rb index 7e5a4805..9e25013d 100644 --- a/app/controllers/components_controller.rb +++ b/app/controllers/components_controller.rb @@ -51,7 +51,7 @@ def show @component_json = if @effective_permissions @component.to_json( methods: %i[histories memberships metadata inherited_memberships available_members rules - reviews] + reviews admins all_users] ) else @component.to_json(methods: %i[rules reviews]) @@ -69,6 +69,8 @@ def create # save, this makes sure those errors are shown and not overwritten by the # component validators. if component.errors.empty? && component.save + component.admin_name = component_create_params[:admin_name].presence || current_user.name + component.admin_email = component_create_params[:admin_email].presence || current_user.email component.duplicate_reviews_and_history(component_create_params[:id]) component.create_rule_satisfactions if component_create_params[:file] component.rules_count = component.rules.where(deleted_at: nil).size @@ -351,7 +353,7 @@ def set_project end def check_permission_to_update_slackchannel - return if component_update_params[:component_metadata_attributes][:data]['Slack Channel ID'].blank? + return if component_update_params[:component_metadata_attributes]&.dig('data')&.dig('Slack Channel ID').blank? authorize_admin_component end @@ -365,6 +367,8 @@ def component_update_params :title, :prefix, :description, + :admin_name, + :admin_email, :advanced_fields, additional_questions_attributes: [:id, :name, :question_type, :_destroy, { options: [] }], component_metadata_attributes: { data: {} } @@ -385,6 +389,8 @@ def component_create_params :release, :title, :description, + :admin_name, + :admin_email, :file, :slack_channel_id, file: {} diff --git a/app/controllers/memberships_controller.rb b/app/controllers/memberships_controller.rb index fb34244b..eb356119 100644 --- a/app/controllers/memberships_controller.rb +++ b/app/controllers/memberships_controller.rb @@ -9,16 +9,13 @@ class MembershipsController < ApplicationController def create # Ensure the current_user has permissions on the Project or component - current_user_effective_role = if current_user.admin - 'admin' - else - Membership.where( - membership_type: membership_create_params[:membership_type], - membership_id: membership_create_params[:membership_id], - user_id: current_user.id - ).pick(:role) - end - unless current_user_effective_role == 'admin' + project_or_component = if membership_create_params[:membership_type] == 'Project' + Project.find_by(id: membership_create_params[:membership_id]) + else + Component.find_by(id: membership_create_params[:membership_id]) + end + + unless current_user.admin || current_user.effective_permissions(project_or_component) == 'admin' raise( NotAuthorizedError, "You are not authorized to manage permissions on this #{membership_create_params[:membership_type]}" diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index bdc474b3..b95d9cb4 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -47,7 +47,7 @@ def show # projects that a user has permissions to access @project.current_user = current_user @project_json = @project.to_json( - methods: %i[histories memberships metadata components available_components available_members details] + methods: %i[histories memberships metadata components available_components available_members details users] ) respond_to do |format| format.html @@ -171,7 +171,9 @@ def project_params end def check_permission_to_update_slackchannel - authorize_admin_project if project_params[:project_metadata_attributes][:data]['Slack Channel ID'].present? + return if project_params[:project_metadata_attributes]&.dig('data')&.dig('Slack Channel ID').blank? + + authorize_admin_project end def project_name_changed?(current_project_name, project_params) diff --git a/app/javascript/components/components/ComponentCard.vue b/app/javascript/components/components/ComponentCard.vue index 124c6969..811f3c69 100644 --- a/app/javascript/components/components/ComponentCard.vue +++ b/app/javascript/components/components/ComponentCard.vue @@ -32,119 +32,113 @@ {{ component.description }} -

+

- {{ component.admin_name }} + PoC: {{ component.admin_name }} {{ component.admin_email ? `(${component.admin_email})` : "" }} No Component Admin - - - - - -