Commit 0d930161 authored by Yorick Peterse's avatar Yorick Peterse

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
parents ce3cf698 f0ba0018
......@@ -74,7 +74,7 @@ module Users
# remove - The IDs of the authorization rows to remove.
# add - Rows to insert in the form `[user id, project id, access level]`
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.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
end
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(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)
service.update_authorizations([], [])
end
end
end
it 'removes authorizations that should be removed' do
authorization = create_authorization(project, user)
......@@ -84,7 +109,7 @@ describe Users::RefreshAuthorizedProjectsService do
it 'populates the authorized projects column' do
# make sure we start with a nil value no matter what the default in the
# 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]])
......
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