Fix User role displayed on projects dashboard
This commit is contained in:
parent
83f79ced3f
commit
837c3b3d73
8 changed files with 62 additions and 3 deletions
|
@ -7,7 +7,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
||||||
skip_cross_project_access_check :index, :starred
|
skip_cross_project_access_check :index, :starred
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@projects = load_projects(params.merge(non_public: true)).page(params[:page])
|
@projects = load_projects(params.merge(non_public: true))
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
|
@ -25,7 +25,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
||||||
|
|
||||||
def starred
|
def starred
|
||||||
@projects = load_projects(params.merge(starred: true))
|
@projects = load_projects(params.merge(starred: true))
|
||||||
.includes(:forked_from_project, :tags).page(params[:page])
|
.includes(:forked_from_project, :tags)
|
||||||
|
|
||||||
@groups = []
|
@groups = []
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
||||||
.new(params: finder_params, current_user: current_user)
|
.new(params: finder_params, current_user: current_user)
|
||||||
.execute
|
.execute
|
||||||
.includes(:route, :creator, namespace: [:route, :owner])
|
.includes(:route, :creator, namespace: [:route, :owner])
|
||||||
|
.page(finder_params[:page])
|
||||||
|
|
||||||
prepare_projects_for_rendering(projects)
|
prepare_projects_for_rendering(projects)
|
||||||
end
|
end
|
||||||
|
|
|
@ -177,6 +177,7 @@ module ProjectsHelper
|
||||||
controller.action_name,
|
controller.action_name,
|
||||||
Gitlab::CurrentSettings.cache_key,
|
Gitlab::CurrentSettings.cache_key,
|
||||||
"cross-project:#{can?(current_user, :read_cross_project)}",
|
"cross-project:#{can?(current_user, :read_cross_project)}",
|
||||||
|
max_project_member_access_cache_key(project),
|
||||||
'v2.6'
|
'v2.6'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,14 @@ module UsersHelper
|
||||||
current_user_menu_items.include?(item)
|
current_user_menu_items.include?(item)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def max_project_member_access(project)
|
||||||
|
current_user&.max_member_access_for_project(project.id) || Gitlab::Access::NO_ACCESS
|
||||||
|
end
|
||||||
|
|
||||||
|
def max_project_member_access_cache_key(project)
|
||||||
|
"access:#{max_project_member_access(project)}"
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def get_profile_tabs
|
def get_profile_tabs
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
- ci = false unless local_assigns[:ci] == true
|
- ci = false unless local_assigns[:ci] == true
|
||||||
- skip_namespace = false unless local_assigns[:skip_namespace] == true
|
- skip_namespace = false unless local_assigns[:skip_namespace] == true
|
||||||
- user = local_assigns[:user]
|
- user = local_assigns[:user]
|
||||||
- access = user&.max_member_access_for_project(project.id) unless user.nil?
|
- access = max_project_member_access(project)
|
||||||
- css_class = '' unless local_assigns[:css_class]
|
- css_class = '' unless local_assigns[:css_class]
|
||||||
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && can_show_last_commit_in_list?(project)
|
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && can_show_last_commit_in_list?(project)
|
||||||
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
|
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
|
||||||
|
|
5
changelogs/unreleased/fj-43565-wrong-role-displayed.yml
Normal file
5
changelogs/unreleased/fj-43565-wrong-role-displayed.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Fix wrong role badge displayed in projects dashboard
|
||||||
|
merge_request: 20374
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -29,6 +29,34 @@ describe 'Dashboard Projects' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when user has access to the project' do
|
||||||
|
it 'shows role badge' do
|
||||||
|
visit dashboard_projects_path
|
||||||
|
|
||||||
|
page.within '.user-access-role' do
|
||||||
|
expect(page).to have_content('Developer')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when role changes', :use_clean_rails_memory_store_fragment_caching do
|
||||||
|
it 'displays the right role' do
|
||||||
|
visit dashboard_projects_path
|
||||||
|
|
||||||
|
page.within '.user-access-role' do
|
||||||
|
expect(page).to have_content('Developer')
|
||||||
|
end
|
||||||
|
|
||||||
|
project.members.last.update(access_level: 40)
|
||||||
|
|
||||||
|
visit dashboard_projects_path
|
||||||
|
|
||||||
|
page.within '.user-access-role' do
|
||||||
|
expect(page).to have_content('Maintainer')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when last_repository_updated_at, last_activity_at and update_at are present' do
|
context 'when last_repository_updated_at, last_activity_at and update_at are present' do
|
||||||
it 'shows the last_repository_updated_at attribute as the update date' do
|
it 'shows the last_repository_updated_at attribute as the update date' do
|
||||||
project.update_attributes!(last_repository_updated_at: Time.now, last_activity_at: 1.hour.ago)
|
project.update_attributes!(last_repository_updated_at: Time.now, last_activity_at: 1.hour.ago)
|
||||||
|
|
|
@ -80,6 +80,7 @@ describe ProjectsHelper do
|
||||||
before do
|
before do
|
||||||
allow(helper).to receive(:current_user).and_return(user)
|
allow(helper).to receive(:current_user).and_return(user)
|
||||||
allow(helper).to receive(:can?).with(user, :read_cross_project) { true }
|
allow(helper).to receive(:can?).with(user, :read_cross_project) { true }
|
||||||
|
allow(user).to receive(:max_member_access_for_project).and_return(40)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "includes the route" do
|
it "includes the route" do
|
||||||
|
@ -125,6 +126,10 @@ describe ProjectsHelper do
|
||||||
|
|
||||||
expect(helper.project_list_cache_key(project)).to include("pipeline-status/#{project.commit.sha}-success")
|
expect(helper.project_list_cache_key(project)).to include("pipeline-status/#{project.commit.sha}-success")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "includes the user max member access" do
|
||||||
|
expect(helper.project_list_cache_key(project)).to include('access:40')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#load_pipeline_status' do
|
describe '#load_pipeline_status' do
|
||||||
|
|
|
@ -170,6 +170,17 @@ RSpec.configure do |config|
|
||||||
redis_queues_cleanup!
|
redis_queues_cleanup!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.around(:each, :use_clean_rails_memory_store_fragment_caching) do |example|
|
||||||
|
caching_store = ActionController::Base.cache_store
|
||||||
|
ActionController::Base.cache_store = ActiveSupport::Cache::MemoryStore.new
|
||||||
|
ActionController::Base.perform_caching = true
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
ActionController::Base.perform_caching = false
|
||||||
|
ActionController::Base.cache_store = caching_store
|
||||||
|
end
|
||||||
|
|
||||||
# The :each scope runs "inside" the example, so this hook ensures the DB is in the
|
# The :each scope runs "inside" the example, so this hook ensures the DB is in the
|
||||||
# correct state before any examples' before hooks are called. This prevents a
|
# correct state before any examples' before hooks are called. This prevents a
|
||||||
# problem where `ScheduleIssuesClosedAtTypeChange` (or any migration that depends
|
# problem where `ScheduleIssuesClosedAtTypeChange` (or any migration that depends
|
||||||
|
|
Loading…
Reference in a new issue