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.admin_name }} + PoC: {{ component.admin_name }} {{ component.admin_email ? `(${component.admin_email})` : "" }} No Component Admin - - - - - - - - - +
+ +
+
+
+
-
-
-
+ PoC Name: {{ component.admin_name }} +
++ PoC Email: {{ component.admin_email }} +
+