Commit 8683f58f authored by Yorick Peterse's avatar Yorick Peterse Committed by Douglas Barbosa Alexandre

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
parent 790035fc
...@@ -74,7 +74,7 @@ module Users ...@@ -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?
......
---
title: Cache project authorizations even when user has access to zero projects
merge_request: 8327
author:
...@@ -54,13 +54,38 @@ describe Users::RefreshAuthorizedProjectsService do ...@@ -54,13 +54,38 @@ 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
it 'does not change authorizations' do
expect(user).not_to receive(:remove_project_authorizations) expect(user).not_to receive(:remove_project_authorizations)
expect(ProjectAuthorization).not_to receive(:insert_authorizations) expect(ProjectAuthorization).not_to receive(:insert_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) expect(user).not_to receive(:set_authorized_projects_column)
service.update_authorizations([], []) service.update_authorizations([], [])
end end
end
end
it 'removes authorizations that should be removed' do it 'removes authorizations that should be removed' do
authorization = create_authorization(project, user) authorization = create_authorization(project, user)
...@@ -84,7 +109,7 @@ describe Users::RefreshAuthorizedProjectsService 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]])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment