Merge branch '26126-cache-even-when-no-projects' into 'master'
Cache project authorizations even when user has access to zero projects Closes #26126 See merge request !8327
This commit is contained in:
commit
0d93016152
3 changed files with 36 additions and 7 deletions
|
@ -74,7 +74,7 @@ module Users
|
||||||
# remove - The IDs of the authorization rows to remove.
|
# remove - The IDs of the authorization rows to remove.
|
||||||
# add - Rows to insert in the form `[user id, project id, access level]`
|
# add - Rows to insert in the form `[user id, project id, access level]`
|
||||||
def update_authorizations(remove = [], add = [])
|
def update_authorizations(remove = [], add = [])
|
||||||
return if remove.empty? && add.empty?
|
return if remove.empty? && add.empty? && user.authorized_projects_populated
|
||||||
|
|
||||||
User.transaction do
|
User.transaction do
|
||||||
user.remove_project_authorizations(remove) unless remove.empty?
|
user.remove_project_authorizations(remove) unless remove.empty?
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Cache project authorizations even when user has access to zero projects
|
||||||
|
merge_request: 8327
|
||||||
|
author:
|
|
@ -54,12 +54,37 @@ describe Users::RefreshAuthorizedProjectsService do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#update_authorizations' do
|
describe '#update_authorizations' do
|
||||||
it 'does nothing when there are no rows to add and remove' do
|
context 'when there are no rows to add and remove' do
|
||||||
expect(user).not_to receive(:remove_project_authorizations)
|
it 'does not change authorizations' do
|
||||||
expect(ProjectAuthorization).not_to receive(:insert_authorizations)
|
expect(user).not_to receive(:remove_project_authorizations)
|
||||||
expect(user).not_to receive(:set_authorized_projects_column)
|
expect(ProjectAuthorization).not_to receive(:insert_authorizations)
|
||||||
|
|
||||||
service.update_authorizations([], [])
|
service.update_authorizations([], [])
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the authorized projects column is not set' do
|
||||||
|
before do
|
||||||
|
user.update!(authorized_projects_populated: nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'populates the authorized projects column' do
|
||||||
|
service.update_authorizations([], [])
|
||||||
|
|
||||||
|
expect(user.authorized_projects_populated).to eq true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the authorized projects column is set' do
|
||||||
|
before do
|
||||||
|
user.update!(authorized_projects_populated: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does nothing' do
|
||||||
|
expect(user).not_to receive(:set_authorized_projects_column)
|
||||||
|
|
||||||
|
service.update_authorizations([], [])
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'removes authorizations that should be removed' do
|
it 'removes authorizations that should be removed' do
|
||||||
|
@ -84,7 +109,7 @@ describe Users::RefreshAuthorizedProjectsService do
|
||||||
it 'populates the authorized projects column' do
|
it 'populates the authorized projects column' do
|
||||||
# make sure we start with a nil value no matter what the default in the
|
# make sure we start with a nil value no matter what the default in the
|
||||||
# factory may be.
|
# factory may be.
|
||||||
user.update(authorized_projects_populated: nil)
|
user.update!(authorized_projects_populated: nil)
|
||||||
|
|
||||||
service.update_authorizations([], [[user.id, project.id, Gitlab::Access::MASTER]])
|
service.update_authorizations([], [[user.id, project.id, Gitlab::Access::MASTER]])
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue