| // Copyright (C) 2017 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.gerrit.server.permissions; |
| |
| import static java.util.Objects.requireNonNull; |
| |
| import com.google.gerrit.extensions.api.access.GerritPermission; |
| |
| public enum RefPermission implements GerritPermission { |
| READ, |
| CREATE, |
| |
| /** |
| * Before checking this permission, the caller needs to verify the branch is deletable and reject |
| * early if the branch should never be deleted. For example, the refs/meta/config branch should |
| * never be deleted because deleting this branch would destroy all Gerrit specific metadata about |
| * the project, including its access rules. If a project is to be removed from Gerrit, its |
| * repository should be removed first. |
| */ |
| DELETE, |
| UPDATE, |
| FORCE_UPDATE, |
| SET_HEAD("set HEAD"), |
| |
| FORGE_AUTHOR, |
| FORGE_COMMITTER, |
| FORGE_SERVER, |
| MERGE, |
| /** |
| * Before checking this permission, the caller should verify {@code USE_SIGNED_OFF_BY} is false. |
| * If it's true, the request should be rejected directly without further check this permission. |
| */ |
| SKIP_VALIDATION, |
| |
| /** Create a change to code review a commit. */ |
| CREATE_CHANGE, |
| |
| /** Create a tag. */ |
| CREATE_TAG, |
| |
| /** Create a signed tag. */ |
| CREATE_SIGNED_TAG, |
| |
| /** |
| * Creates changes, then also immediately submits them during {@code push}. |
| * |
| * <p>This is similar to {@link #UPDATE} except it constructs changes first, then submits them |
| * according to the submit strategy, which may include cherry-pick or rebase. By creating changes |
| * for each commit, automatic server side rebase, and post-update review are enabled. |
| */ |
| UPDATE_BY_SUBMIT, |
| |
| /** |
| * Can read all private changes on the ref. Typically granted to CI systems if they should run on |
| * private changes. |
| */ |
| READ_PRIVATE_CHANGES, |
| |
| /** Read access to ref's config section in {@code project.config}. */ |
| READ_CONFIG("read ref config"), |
| |
| /** Write access to ref's config section in {@code project.config}. */ |
| WRITE_CONFIG("write ref config"); |
| |
| private final String description; |
| |
| RefPermission() { |
| this.description = null; |
| } |
| |
| RefPermission(String description) { |
| this.description = requireNonNull(description); |
| } |
| |
| @Override |
| public String describeForException() { |
| return description != null ? description : GerritPermission.describeEnumValue(this); |
| } |
| } |