Skip to content
Snippets Groups Projects
Commit f0ba0018 authored by Adam Niedzielski's avatar Adam Niedzielski
Browse files

Cache project authorizations even when user has access to zero projects

parent 0499431a
No related branches found
No related tags found
No related merge requests found
Loading
@@ -74,7 +74,7 @@ module Users
Loading
@@ -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?
Loading
Loading
---
title: Cache project authorizations even when user has access to zero projects
merge_request: 8327
author:
Loading
@@ -54,12 +54,37 @@ describe Users::RefreshAuthorizedProjectsService do
Loading
@@ -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
Loading
@@ -84,7 +109,7 @@ describe Users::RefreshAuthorizedProjectsService do
Loading
@@ -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
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment