From e1ab7bda4ba2cc544d570f34d53678f24c2980be Mon Sep 17 00:00:00 2001 From: Giga Chubinidze Date: Fri, 7 Jul 2023 07:06:43 +0400 Subject: [PATCH 1/5] Project card permission with not assigned team admin [SCI-8727] --- app/services/toolbars/projects_service.rb | 2 + .../index/_project_actions_dropdown.html.erb | 196 ++++++++++-------- 2 files changed, 107 insertions(+), 91 deletions(-) diff --git a/app/services/toolbars/projects_service.rb b/app/services/toolbars/projects_service.rb index 98594b3c1..a653a1f34 100644 --- a/app/services/toolbars/projects_service.rb +++ b/app/services/toolbars/projects_service.rb @@ -13,6 +13,7 @@ module Toolbars @project_folders = current_user.current_team.project_folders.where(id: project_folder_ids) @items = @projects + @project_folders + @not_assigned = @projects.any? { |project| !project.assigned_users.include?(current_user) } @single = @items.length == 1 @@ -29,6 +30,7 @@ module Toolbars def actions return [] if @item_type == :none + return [access_action] if @not_assigned [ restore_action, diff --git a/app/views/projects/index/_project_actions_dropdown.html.erb b/app/views/projects/index/_project_actions_dropdown.html.erb index 2c88b534c..fea1ba0d6 100644 --- a/app/views/projects/index/_project_actions_dropdown.html.erb +++ b/app/views/projects/index/_project_actions_dropdown.html.erb @@ -3,98 +3,112 @@ <% project_form = f %> <%= f.hidden_field :archived, value: !project.archived %> <% end %> + +<% assigned = project.assigned_users.include?(current_user) %> From e381651df2a59c94460fc85d113ea0c3f763c3fd Mon Sep 17 00:00:00 2001 From: Giga Chubinidze Date: Wed, 19 Jul 2023 10:31:14 +0400 Subject: [PATCH 2/5] added scope functionality --- app/models/project.rb | 5 +++++ app/services/toolbars/projects_service.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index 2735d78a7..5c4723419 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -71,6 +71,11 @@ class Project < ApplicationRecord end end) + scope :not_assigned_to_user, lambda { |user| + left_joins(:user_assignments) + .where('user_assignments.user_id = ? AND user_assignments.id IS NULL', user.id) + } + scope :templates, -> { where(template: true) } after_create :auto_assign_project_members, if: :visible? diff --git a/app/services/toolbars/projects_service.rb b/app/services/toolbars/projects_service.rb index a653a1f34..57ad67a81 100644 --- a/app/services/toolbars/projects_service.rb +++ b/app/services/toolbars/projects_service.rb @@ -13,7 +13,7 @@ module Toolbars @project_folders = current_user.current_team.project_folders.where(id: project_folder_ids) @items = @projects + @project_folders - @not_assigned = @projects.any? { |project| !project.assigned_users.include?(current_user) } + @not_assigned = current_user.current_team.projects.not_assigned_to_user(current_user).any? @single = @items.length == 1 From 3c588709be2106178b66ccf6c36a28f9d6de1aea Mon Sep 17 00:00:00 2001 From: Giga Chubinidze Date: Mon, 21 Aug 2023 06:48:08 +0400 Subject: [PATCH 3/5] changed logic --- app/models/project.rb | 5 - app/services/toolbars/projects_service.rb | 7 +- .../index/_project_actions_dropdown.html.erb | 194 ++++++++---------- 3 files changed, 95 insertions(+), 111 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 5c4723419..2735d78a7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -71,11 +71,6 @@ class Project < ApplicationRecord end end) - scope :not_assigned_to_user, lambda { |user| - left_joins(:user_assignments) - .where('user_assignments.user_id = ? AND user_assignments.id IS NULL', user.id) - } - scope :templates, -> { where(template: true) } after_create :auto_assign_project_members, if: :visible? diff --git a/app/services/toolbars/projects_service.rb b/app/services/toolbars/projects_service.rb index 57ad67a81..91323eb11 100644 --- a/app/services/toolbars/projects_service.rb +++ b/app/services/toolbars/projects_service.rb @@ -17,6 +17,9 @@ module Toolbars @single = @items.length == 1 + @team_owner = @current_user.current_team.user_assignments.find { |ua| ua.user == current_user }&.user_role.owner? + @unassigned_team_owner = @team_owner && !can_read_project?(@items.first) + @item_type = if project_ids.blank? && project_folder_ids.blank? :none elsif project_ids.present? && project_folder_ids.present? @@ -30,7 +33,7 @@ module Toolbars def actions return [] if @item_type == :none - return [access_action] if @not_assigned + return [access_action] if @unassigned_team_owner [ restore_action, @@ -86,7 +89,7 @@ module Toolbars project = @items.first - return unless can_read_project?(project) + return unless @team_owner || can_read_project?(project) path = if can_manage_project_users?(project) edit_access_permissions_project_path(project) diff --git a/app/views/projects/index/_project_actions_dropdown.html.erb b/app/views/projects/index/_project_actions_dropdown.html.erb index fea1ba0d6..2c88b534c 100644 --- a/app/views/projects/index/_project_actions_dropdown.html.erb +++ b/app/views/projects/index/_project_actions_dropdown.html.erb @@ -3,112 +3,98 @@ <% project_form = f %> <%= f.hidden_field :archived, value: !project.archived %> <% end %> - -<% assigned = project.assigned_users.include?(current_user) %> From a391e6e6e1f7dacd97295f52e3bf644e5fa0a2a9 Mon Sep 17 00:00:00 2001 From: Giga Chubinidze Date: Mon, 21 Aug 2023 14:08:17 +0400 Subject: [PATCH 4/5] changed loop --- app/services/toolbars/projects_service.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/services/toolbars/projects_service.rb b/app/services/toolbars/projects_service.rb index 91323eb11..ba2123e29 100644 --- a/app/services/toolbars/projects_service.rb +++ b/app/services/toolbars/projects_service.rb @@ -13,11 +13,10 @@ module Toolbars @project_folders = current_user.current_team.project_folders.where(id: project_folder_ids) @items = @projects + @project_folders - @not_assigned = current_user.current_team.projects.not_assigned_to_user(current_user).any? @single = @items.length == 1 - @team_owner = @current_user.current_team.user_assignments.find { |ua| ua.user == current_user }&.user_role.owner? + @team_owner = @current_user.current_team.user_assignments.exists?(user: @current_user, role: UserRole.find_predefined_owner_role) @unassigned_team_owner = @team_owner && !can_read_project?(@items.first) @item_type = if project_ids.blank? && project_folder_ids.blank? From afdfec5f717cfb461f639f44d0156d7f5f6687dc Mon Sep 17 00:00:00 2001 From: G-Chubinidze <112488503+G-Chubinidze@users.noreply.github.com> Date: Mon, 21 Aug 2023 14:13:00 +0400 Subject: [PATCH 5/5] Update projects_service.rb --- app/services/toolbars/projects_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/toolbars/projects_service.rb b/app/services/toolbars/projects_service.rb index ba2123e29..9502f68fd 100644 --- a/app/services/toolbars/projects_service.rb +++ b/app/services/toolbars/projects_service.rb @@ -16,7 +16,7 @@ module Toolbars @single = @items.length == 1 - @team_owner = @current_user.current_team.user_assignments.exists?(user: @current_user, role: UserRole.find_predefined_owner_role) + @team_owner = @current_user.current_team.user_assignments.exists?(user: @current_user, user_role: UserRole.find_predefined_owner_role) @unassigned_team_owner = @team_owner && !can_read_project?(@items.first) @item_type = if project_ids.blank? && project_folder_ids.blank?