Admin impersonation through UI disabled when personal access tokens are disabled
Summary
In !98702 (merged) we added the ability to disable personal access tokens along with all other token types. One of those other token types disabled as part of that MR is impersonation tokens. Unfortunately, in the process of disabling impersonation tokens we also disabled the ability to impersonate a user through the Admin area. This happened because of a shared helper impersonation_enabled?
.
We should give impersonation via web UI and impersonation via API their own methods to check whether impersonation should be enabled.
Steps to reproduce
- Find a user in the admin area.
- Observe the Impersonate button in the top right.
- In Admin area -> Settings -> General, select Disable personal access tokens.
- Save.
- Find the same user as before in Admin area.
- Observe there is no Impersonate button in the top right.
Example Project
What is the current bug behavior?
Impersonation in the web UI is disabled when personal access tokens are disabled.
What is the expected correct behavior?
Disabling personal access tokens should only disable impersonation tokens/impersonation through the UI.
Relevant logs and/or screenshots
Output of checks
Results of GitLab environment info
Expand for output related to GitLab environment info
(For installations with omnibus-gitlab package run and paste the output of: \`sudo gitlab-rake gitlab:env:info\`) (For installations from source run and paste the output of: \`sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production\`)
Results of GitLab application Check
Expand for output related to the GitLab application check
(For installations with omnibus-gitlab package run and paste the output of: `sudo gitlab-rake gitlab:check SANITIZE=true`) (For installations from source run and paste the output of: `sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production SANITIZE=true`) (we will only investigate if the tests are passing)
Possible fixes
The offending code is at https://gitlab.com/gitlab-org/gitlab/-/blob/43c07cf03988ee4db1cd7df5ab6534a5b648fa18/ee/app/helpers/ee/users_helper.rb#L17. This method is used in both the admin view as well as Admin::ImpersonationTokenController
.
Create distinct methods/checks for each case. The helper is probably most appropriate to keep for the view and then the controller can probably just use a direct check in it's verify method.
def impersonation_enabled?
super && !::Gitlab::CurrentSettings.personal_access_tokens_disabled?
end