= Gerrit Code Review - Access Controls

Access controls in Gerrit are group based.  Every user account is a
member of one or more groups, and access and privileges are granted
to those groups.  Access rights cannot be granted to individual
users.

To view/edit the access controls for a specific project, first
navigate to the projects page: for example,
https://gerrit-review.googlesource.com/admin/repos/ . Then click on
the individual project, and then click Access. This will bring you
to a url that looks like
https://gerrit-review.googlesource.com/admin/repos/gerrit,access

[[system_groups]]
== System Groups

Gerrit comes with the following system groups:

* Anonymous Users
* Change Owner
* Project Owners
* Registered Users

The system groups are assigned special access and membership management
privileges.


[[anonymous_users]]
=== Anonymous Users

All users are automatically a member of this group.  Users who are
not signed in are a member of only this group, and no others.

Any access rights assigned to this group are inherited by all users.

Administrators and project owners can grant access rights to this
group in order to permit anonymous users to view project changes,
without requiring sign in first.  Currently it is only worthwhile
to grant `Read` access to this group as Gerrit requires an account
identity for all other operations.


[[project_owners]]
=== Project Owners

Access rights assigned to this group are always evaluated within the
context of a project to which the access rights apply. These rights
therefore apply to all the users who are owners of this project.

By assigning access rights to this group on a parent project Gerrit
administrators can define a set of default access rights for
<<category_owner,project owners>>. Child projects inherit these
access rights where they are resolved to the users that own the child
project.  Having default access rights for
<<category_owner,project owners>> assigned on a parent project may
avoid the need to initially configure access rights for
newly created child projects.


[[change_owner]]
=== Change Owner

Access rights assigned to this group are always evaluated within the
context of a change to which the access rights apply. These rights
therefore apply to the user who is the owner of this change.

It is typical to assign a label to this group, allowing the change
owner to vote on his change, but not actually cause it to become
approved or rejected.

[[registered_users]]
=== Registered Users

All signed-in users are automatically a member of this group (and
also <<anonymous_users,'Anonymous Users'>>, see above).

Any access rights assigned to this group are inherited by all
users as soon as they sign-in to Gerrit.  If OpenID authentication
is being employed, moving from only 'Anonymous Users' into this
group is very easy.  Caution should be taken when assigning any
permissions to this group.

It is typical to assign `Code-Review -1..+1` to this group,
allowing signed-in users to vote on a change, but not actually
cause it to become approved or rejected.

Registered users are always permitted to make and publish comments
on any change in any project they have `Read` access to.


== Predefined Groups

Predefined groups differs from system groups by the fact that they
exist in the ACCOUNT_GROUPS table (like normal groups) but predefined groups
are created on Gerrit site initialization and unique UUIDs are assigned
to those groups. These UUIDs are different on different Gerrit sites.

Gerrit comes with two predefined groups:

* Administrators
* Non-Interactive Users


[[administrators]]
=== Administrators

This is a predefined group, created on Gerrit site initialization, that
has the capability link:access-control.html#capability_administrateServer[
'Administrate Server'] assigned.

It is a normal Gerrit group without magic. This means if you remove
the 'Administrate Server' capability from it, its members are no longer
Gerrit administrators, despite the group name. The group may also be
renamed.


[[non-interactive_users]]
=== Non-Interactive Users

This is the Gerrit "batch" identity. The capabilities
link:access-control.html#capability_priority['Priority BATCH'] and
link:access-control.html#capability_streamEvents['Stream Events']
are assigned to this predefined group on Gerrit site creation.

The members of this group are not expected to perform interactive
operations on the Gerrit web front-end.

However, sometimes such a user may need a separate thread pool in
order to prevent it from grabbing threads from the interactive users.

These users live in a second thread pool, which separates operations
made by the non-interactive users from the ones made by the interactive
users. This ensures that the interactive users can keep working when
resources are tight.


== Account Groups

Account groups contain a list of zero or more user account members,
added individually by a group owner.  Any user account listed as
a group member is given any access rights granted to the group.

Every group has one other group designated as its owner.  Users who
are members of the owner group can:

* Add users and other groups to this group
* Remove users and other groups from this group
* Change the name of this group
* Change the description of this group
* Change the owner of this group, to another group

It is permissible for a group to own itself, allowing the group
members to directly manage who their peers are.

Newly created groups are automatically created as owning themselves,
with the creating user as the only member.  This permits the group
creator to add additional members, and change the owner to another
group if desired.

It is somewhat common to create two groups at the same time,
for example `Foo` and `Foo-admin`, where the latter group
`Foo-admin` owns both itself and also group `Foo`.  Users who
are members of `Foo-admin` can thus control the membership of
`Foo`, without actually having the access rights granted to `Foo`.
This configuration can help prevent accidental submits when the
members of `Foo` have submit rights on a project, and the members of
`Foo-admin` typically do not need to have such rights.


[[ldap_groups]]
== LDAP Groups

LDAP groups are Account Groups that are maintained inside of your
LDAP instance. If you are using LDAP to manage your groups they will
not appear in the Groups list. However you can use them just like
regular Account Groups by prefixing your group with "ldap/" in the
Access Control for a project. For example "ldap/foo-project" will
add the LDAP "foo-project" group to the access list.


== Project Access Control Lists

A system wide access control list affecting all projects is stored in
project "`All-Projects`".  This inheritance can be configured
through link:cmd-set-project-parent.html[gerrit set-project-parent].

Per-project access control lists are also supported.

Users are permitted to use the maximum range granted to any of their
groups on a label.  For example, a user is a member of `Foo Leads`, and
the following ACLs are granted on a project:

[options="header"]
|===================================================
|Group           |Reference Name |Label      |Range
|Anonymous Users |refs/heads/*   |Code-Review|-1..+1
|Registered Users|refs/heads/*   |Code-Review|-1..+2
|Foo Leads       |refs/heads/*   |Code-Review|-2..0
|===================================================

Then the effective range permitted to be used by the user is
`-2..+2`, as the user is a member of all three groups (see above
about the system groups) and the maximum range is chosen (so the
lowest value granted to any group, and the highest value granted
to any group).

Reference-level access control is also possible.

Permissions can be set on a single reference name to match one
branch (e.g. `refs/heads/master`), or on a reference namespace
(e.g. `+refs/heads/*+`) to match any branch starting with that
prefix. So a permission with `+refs/heads/*+` will match all of
`refs/heads/master`, `refs/heads/experimental`, `refs/heads/release/1.0` etc.

Reference names can also be described with a regular expression
by prefixing the reference name with `^`.  For example
`^refs/heads/[a-z]{1,8}` matches all lower case branch names
between 1 and 8 characters long.  Within a regular expression `.`
is a wildcard matching any character, but may be escaped as `\.`.
The link:http://www.brics.dk/automaton/[dk.brics.automaton library]
is used for evaluation of regular expression access control
rules. See the library documentation for details on this
particular regular expression flavor. One quirk is that the
shortest possible pattern expansion must be a valid ref name:
thus `^refs/heads/.*/name` will fail because `refs/heads//name`
is not a valid reference, but `^refs/heads/.+/name` will work.

[[sharded-user-id]]
References can have the user name or the sharded account ID of the
current user automatically included, creating dynamic access controls
that change to match the currently logged in user.  For example to
provide a personal sandbox space to all developers,
`+refs/heads/sandbox/${username}/*+` allows the user 'joe' to use
'refs/heads/sandbox/joe/foo'. The sharded account ID can be used to
give users access to their user branch in the `All-Users` repository,
for example `+refs/users/${shardeduserid}+` is resolved to
'refs/users/23/1011123' if the account ID of the current user is
`1011123`.

When evaluating a reference-level access right, Gerrit will use
the full set of access rights to determine if the user
is allowed to perform a given action. For example, if a user is a
member of `Foo Leads`, they are reviewing a change destined for
the `refs/heads/qa` branch, and the following ACLs are granted
on the project:

[options="header"]
|===============================================================
|Group            |Reference Name|Label      |Range   |Exclusive
|Registered Users |refs/heads/*  |Code-Review| -1..+1 |
|Foo Leads        |refs/heads/*  |Code-Review| -2..+2 |
|QA Leads         |refs/heads/qa |Code-Review| -2..+2 |
|===============================================================

Then the effective range permitted to be used by the user is
`-2..+2`, as the user's membership of `Foo Leads` effectively grant
them access to the entire reference space, thanks to the wildcard.

Gerrit also supports exclusive reference-level access control.

It is possible to configure Gerrit to grant an exclusive ref level
access control so that only users of a specific group can perform
an operation on a project/reference pair. This is done by ticking
the exclusive flag when setting the permission for the
`refs/heads/qa` branch.

For example, if a user who is a member of `Foo Leads` tries to
review a change destined for branch `refs/heads/qa` in a project,
and the following ACLs are granted:

[options="header"]
|==============================================================
|Group           |Reference Name|Label      |Range   |Exclusive
|Registered Users|refs/heads/*  |Code-Review| -1..+1 |
|Foo Leads       |refs/heads/*  |Code-Review| -2..+2 |
|QA Leads        |refs/heads/qa |Code-Review| -2..+2 |X
|==============================================================

Then this user will not have `Code-Review` rights on that change,
since there is an exclusive access right in place for the
`refs/heads/qa` branch. This allows locking down access for a
particular branch to a limited set of users, bypassing inherited
rights and wildcards.

In order to grant the ability to `Code-Review` to the members of
`Foo Leads`, in `refs/heads/qa` then the following access rights
would be needed:

[options="header"]
|==============================================================
|Group           |Reference Name|Category   |Range   |Exclusive
|Registered Users|refs/heads/*  |Code-Review| -1..+1 |
|Foo Leads       |refs/heads/*  |Code-Review| -2..+2 |
|QA Leads        |refs/heads/qa |Code-Review| -2..+2 |X
|Foo Leads       |refs/heads/qa |Code-Review| -2..+2 |
|==============================================================


=== OpenID Authentication

If the Gerrit instance is configured to use OpenID authentication,
an account's effective group membership will be restricted to only
the `Anonymous Users` and `Registered Users` groups, unless *all*
of its OpenID identities match one or more of the patterns listed
in the `auth.trustedOpenID` list from `gerrit.config`.


=== All Projects

Any access right granted to a group within `All-Projects`
is automatically inherited by every other project in the same
Gerrit instance.  These rights can be seen, but not modified,
in any other project's `Access` administration tab.

Only members of the groups with the `Administrate Server` capability
may edit the access control list for `All-Projects`. By default this
capability is given to the group `Administrators`, but can be given
to more groups.

Ownership of this project cannot be delegated to another group.
This restriction is by design.  Granting ownership to another
group gives nearly the same level of access as membership in
`Administrators` does, as group members would be able to alter
permissions for every managed project including global capabilities.


=== Per-Project

The per-project ACL is evaluated before the global `All-Projects` ACL,
permitting some limited override capability to project owners. This
behavior is generally only useful on the `Read` category when
granting 'DENY' within a specific project to deny a group access.


[[references]]
== Special and magic references

The reference namespaces used in git are generally two, one for branches and
one for tags:

* +refs/heads/*+
* +refs/tags/*+

However, every reference under +refs/*+ is really available, and in Gerrit this
opportunity for giving other refs a special meaning is used.  In Gerrit they
are sometimes used as magic/virtual references that give the push to Gerrit a
special meaning.


[[references_special]]
=== Special references

The special references have content that's either generated by Gerrit or
contains important project configuration that Gerrit needs. When making
changes to these references, Gerrit will take extra precautions to verify the
contents compatibility at upload time.


==== refs/changes/*

Under this namespace each uploaded patch set for every change gets a static
reference in their git.  The format is convenient but still intended to scale to
hundreds of thousands of patch sets.  To access a given patch set you will
need the change number and patch set number.

--
'refs/changes/'<last two digits of change number>/
  <change number>/
  <patch set number>
--

You can also find these static references linked on the page of each change.


==== refs/meta/config

This is where the Gerrit configuration of each project resides.  This
branch contains several files of importance: +project.config+, +groups+ and
+rules.pl+.  Together they control access and behavior during the change
review process.


==== refs/meta/dashboards/*

There's a dedicated page where you can read more about
link:user-dashboards.html[User Dashboards].


==== refs/notes/review

Autogenerated copy of review notes for all changes in the git.  Each log entry
on the refs/notes/review branch also references the patch set on which the
review is made.  This functionality is provided by the review-notes plugin.


[[references_magic]]
=== Magic references

These are references with added functionality to them compared to a regular
git push operation.

[[refs_for]]
==== refs/for/<branch ref>

Most prominent is the `refs/for/<branch ref>` reference which is the reference
upon which we build the code review intercept before submitting a commit to
the branch it's uploaded to.

Further documentation on how to push can be found on the
link:user-upload.html#push_create[Upload changes] page.


[[access_categories]]
== Access Categories

Gerrit has several permission categories that can be granted to groups
within projects, enabling functionality for that group's members.


[[category_abandon]]
=== Abandon

This category controls whether users are allowed to abandon changes
to projects in Gerrit. It can give permission to abandon a specific
change to a given ref.

The uploader of a change, anyone granted the <<category_owner,`Owner`>>
permission at the ref or project level, and anyone granted the
<<capability_administrateServer,`Administrate Server`>>
permission can also Abandon changes.

This also grants the permission to restore a change if the user also
has link:#category_push[push permission] on the change's destination
ref.


[[category_create]]
=== Create Reference

The create reference category controls whether it is possible to
create new references, branches or tags.  This implies that the
reference must not already exist, it's not a destructive permission
in that you can't overwrite or remove any previously existing
references (and also discard any commits in the process).

It's probably most common to either permit the creation of a single
branch in many gits (by granting permission on a parent project), or
to grant this permission to a name pattern of branches.

This permission is often given in conjunction with regular push
branch permissions, allowing the holder of both to create new branches
as well as bypass review for new commits on that branch.

To push lightweight (non-annotated) tags, grant
`Create Reference` for reference name `+refs/tags/*+`, as lightweight
tags are implemented just like branches in Git. To push a lightweight
tag on a new commit (commit not reachable from any branch/tag) grant
`Push` permission on `+refs/tags/*+` too. The `Push` permission on
`+refs/tags/*+` also allows fast-forwarding of lightweight tags.

For example, to grant the possibility to create new branches under the
namespace `foo`, you have to grant this permission on
`+refs/heads/foo/*+` for the group that should have it.
Finally, if you plan to grant each user a personal namespace in
where they are free to create as many branches as they wish, you
should grant the create reference permission so it's possible
to create new branches. This is done by using the special
`${username}` keyword in the reference pattern, e.g.
`+refs/heads/sandbox/${username}/*+`. If you do, it's also recommended
you grant the users the push force permission to be able to clean up
stale branches.

[[category_delete]]
=== Delete Reference

The delete reference category controls whether it is possible to delete
references, branches or tags. It doesn't allow any other update of
references.

Deletion of references is also possible if `Push` with the force option
is granted, however that includes the permission to fast-forward and
force-update references to existing and new commits. Being able to push
references for new commits is bad if bypassing of code review must be
prevented.


[[category_forge_author]]
=== Forge Author

Normally Gerrit requires the author and the committer identity
lines in a Git commit object (or tagger line in an annotated tag) to
match one of the registered email addresses of the uploading user.
This permission allows users to bypass parts of that validation, which
may be necessary when mirroring changes from an upstream project.

Permits the use of an unverified author line in commit objects.
This can be useful when applying patches received by email from
3rd parties, when cherry-picking changes written by others across
branches, or when amending someone else's commit to fix up a minor
problem before submitting.

By default this is granted to `Registered Users` in all projects,
but a site administrator may disable it if verified authorship
is required.


[[category_forge_committer]]
=== Forge Committer

Normally Gerrit requires the author and the committer identity
lines in a Git commit object (or tagger line in an annotated tag) to
match one of the registered email addresses of the uploading user.
This permission allows users to bypass parts of that validation, which
may be necessary when mirroring changes from an upstream project.

Allows the use of an unverified committer line in commit objects, or an
unverified tagger line in annotated tag objects.  Typically this is only
required when mirroring commits from an upstream project repository.


[[category_forge_server]]
=== Forge Server

Normally Gerrit requires the author and the committer identity
lines in a Git commit object (or tagger line in an annotated tag) to
match one of the registered email addresses of the uploading user.
This permission allows users to bypass parts of that validation, which
may be necessary when mirroring changes from an upstream project.

Allows the use of the server's own name and email on the committer
line of a new commit object.  This should only be necessary when force
pushing a commit history which has been rewritten by 'git filter-branch'
and that contains merge commits previously created by this Gerrit Code
Review server.


[[category_owner]]
=== Owner

The `Owner` category controls which groups can modify the project's
configuration.  Users who are members of an owner group can:

* Change the project description
* Grant/revoke any access rights, including `Owner`

To get SSH branch access project owners must grant an access right to a group
they are a member of, just like for any other user.

Ownership over a particular branch subspace may be delegated by
entering a branch pattern.  To delegate control over all branches
that begin with `qa/` to the QA group, add `Owner` category
for reference `+refs/heads/qa/*+`.  Members of the QA group can
further refine access, but only for references that begin with
`refs/heads/qa/`. See <<project_owners,project owners>> to find
out more about this role.

For the `All-Projects` root project any `Owner` access right on
'refs/*' is ignored since this permission would allow users to edit the
global capabilities, which is the same as being able to administrate
the Gerrit server (e.g. the user could assign the `Administrate Server`
capability to the own account).


[[category_push]]
=== Push

This category controls how users are allowed to upload new commits
to projects in Gerrit. It can either give permission to push
directly into a branch, bypassing any code review process
that would otherwise be used. Or it may give permission to upload
new changes for code review, this depends on which namespace the
permission is granted to.

[[category_push_direct]]
==== Direct Push

Any existing branch can be fast-forwarded to a new commit.
Creation of new branches is controlled by the
link:access-control.html#category_create['Create Reference']
category.  Deletion of existing branches is rejected.  This is the
safest mode as commits cannot be discarded.

* Force option
+
Implies <<category_delete,Delete Reference>>. Since a force push is
effectively a delete immediately followed by a create, but performed
atomically on the server and logged, this option also permits forced
push updates to branches.  Enabling this option allows existing commits
to be discarded from a project history.

The push category is primarily useful for projects that only want to
take advantage of Gerrit's access control features and do not need
its code review functionality.  Projects that need to require code
reviews should not grant this category.


[[category_push_review]]
==== Upload To Code Review

The `Push` access right granted on the namespace
`refs/for/refs/heads/BRANCH` permits the user to upload a non-merge
commit to the project's `refs/for/BRANCH` namespace, creating a new
change for code review.

A user must be able to clone or fetch the project in order to create
a new commit on their local system, so in practice they must also
have the `Read` access granted to upload a change.

For an open source, public Gerrit installation, it is common to grant
`Push` for `+refs/for/refs/heads/*+` to `Registered Users` in the
`All-Projects` ACL.  For more private installations, its common to
grant `Push` for `+refs/for/refs/heads/*+` to all users of a project.

* Force option
+
The force option has no function when granted to a branch in the
`+refs/for/refs/heads/*+` namespace.


[[category_add_patch_set]]
=== Add Patch Set

This category controls which users are allowed to upload new patch sets to
existing changes. Irrespective of this permission, change owners are always
allowed to upload new patch sets for their changes. This permission needs to be
set on `refs/for/*`.

By default, this permission is granted to `Registered Users` on `refs/for/*`,
allowing all registered users to upload a new patch set to any change. Revoking
this permission (by granting it to no groups and setting the "Exclusive" flag)
will prevent users from uploading a patch set to a change they do not own.


[[category_push_merge]]
=== Push Merge Commits

The `Push Merge Commit` access right permits the user to upload merge
commits.  It's an add-on to the <<category_push,Push>> access right, and
so it won't be sufficient with only `Push Merge Commit` granted for a
push to happen.  Some projects wish to restrict merges to being created
by Gerrit. By granting `Push` without `Push Merge Commit`, the only
merges that enter the system will be those created by Gerrit.

The reference name connected to a `Push Merge Commit` entry must always
be prefixed with `refs/for/`, for example `refs/for/refs/heads/BRANCH`.
This applies even for an entry that complements a `Push` entry for
`refs/heads/BRANCH` that allows direct pushes of non-merge commits, and
the intention of the `Push Merge Commit` entry is to allow direct pushes
of merge commits.


[[category_push_annotated]]
[[category_create_annotated]]
=== Create Annotated Tag

This category permits users to push an annotated tag object into the
project's repository.  Typically this would be done with a command line
such as:

----
  git push ssh://USER@HOST:PORT/PROJECT tag v1.0
----

Or:

----
  git push https://HOST/PROJECT tag v1.0
----

Tags must be annotated (created with `git tag -a`), should exist in
the `refs/tags/` namespace, and should be new.

This category is intended to be used to publish tags when a project
reaches a stable release point worth remembering in history.

It allows for a new annotated (unsigned) tag to be created.  The
tagger email address must be verified for the current user.

To push tags created by users other than the current user (such
as tags mirrored from an upstream project), `Forge Committer Identity`
must be also granted in addition to `Create Annotated Tag`.

To push lightweight (non annotated) tags, grant
<<category_create,`Create Reference`>> for reference name
`+refs/tags/*+`, as lightweight tags are implemented just like
branches in Git.

To delete or overwrite an existing tag, grant `Push` with the force
option enabled for reference name `+refs/tags/*+`, as deleting a tag
requires the same permission as deleting a branch.

To push an annotated tag on a new commit (commit not reachable from any
branch/tag) grant `Push` permission on `+refs/tags/*+` too.
The `Push` permission on `+refs/tags/*+` does *not* allow updating of annotated
tags, not even fast-forwarding of annotated tags. Update of annotated tags
is only allowed by granting `Push` with `force` option on `+refs/tags/*+`.


[[category_push_signed]]
[[category_create_signed]]
=== Create Signed Tag

This category permits users to push a PGP signed tag object into the
project's repository.  Typically this would be done with a command
line such as:

----
  git push ssh://USER@HOST:PORT/PROJECT tag v1.0
----

Or:

----
  git push https://HOST/PROJECT tag v1.0
----

Tags must be signed (created with `git tag -s`), should exist in the
`refs/tags/` namespace, and should be new.


[[category_read]]
=== Read

The `Read` category controls visibility to the project's
changes, comments, code diffs, and Git access over SSH or HTTP.
A user must have this access granted in order to see a project, its
changes, or any of its data.

[[read_special_behaviors]]
==== Special behaviors

This category has multiple special behaviors:

The per-project ACL is evaluated before the global all projects ACL.
If the per-project ACL has granted `Read` with 'DENY', and does not
otherwise grant `Read` with 'ALLOW', then a `Read` in the all projects
ACL is ignored.  This behavior is useful to hide a handful of projects
on an otherwise public server.

You cannot grant `Read` on the `refs/tags/` namespace.  Visibility to
`refs/tags/` is derived from `Read` grants on refs namespaces other than
`refs/tags/`, `refs/changes/`, and `refs/cache-automerge/` by finding
tags reachable from those refs.  For example, if a tag `refs/tags/test`
points to a commit on the branch `refs/heads/master`, then allowing
`Read` access to `refs/heads/master` would also allow access to
`refs/tags/test`.  If a tag is reachable from multiple refs, allowing
access to any of those refs allows access to the tag.

[[read_typical_usage]]
==== Typical usage

For an open source, public Gerrit installation it is common to grant
`Read` to `Anonymous Users` in the `All-Projects` ACL, enabling
casual browsing of any project's changes, as well as fetching any
project's repository over SSH or HTTP.  New projects can be
temporarily hidden from public view by granting `Read` with 'DENY'
to `Anonymous Users` and granting `Read` to the project owner's
group within the per-project ACL.

For a private Gerrit installation using a trusted HTTP authentication
source, granting `Read` to `Registered Users` may be more
typical, enabling read access only to those users who have been
able to authenticate through the HTTP access controls.  This may
be suitable in a corporate deployment if the HTTP access control
is already restricted to the correct set of users.


[[category_rebase]]
=== Rebase

This category permits users to rebase changes via the web UI by pushing
the `Rebase Change` button.

The change owner and submitters can always rebase changes in the web UI
(even without having the `Rebase` access right assigned).

Users without this access right who are able to upload new patch sets
can still do the rebase locally and upload the rebased commit as a new
patch set.


[[category_remove_reviewer]]
=== Remove Reviewer

This category permits users to remove other users from the list of
reviewers on a change.

Change owners can always remove reviewers who have given a zero or positive
score (even without having the `Remove Reviewer` access right assigned).

Project owners and site administrators can always remove any reviewer (even
without having the `Remove Reviewer` access right assigned).

Users without this access right can only remove themselves from the
reviewer list on a change.


[[category_review_labels]]
=== Review Labels

For every configured label `My-Name` in the project, there is a
corresponding permission `label-My-Name` with a range corresponding to
the defined values. There is also a corresponding `labelAs-My-Name`
permission that enables editing another user's label.

Gerrit comes pre-configured with a default 'Code-Review' label that can
be granted to groups within projects, enabling functionality for that
group's members. link:config-labels.html[Custom labels] may also be
defined globally or on a per-project basis.


[[category_submit]]
=== Submit

This category permits users to submit changes.

Submitting a change causes it to be merged into the destination
branch as soon as possible, making it a permanent part of the
project's history.

In order to submit, all labels (such as `Verified` and `Code-Review`,
above) must enable submit, and also must not block it.  See above for
details on each label.

To link:user-upload.html#auto_merge[immediately submit a change on push]
the caller needs to have the Submit permission on `refs/for/<ref>`
(e.g. on `refs/for/refs/heads/master`).

Submitting to the `refs/meta/config` branch is only allowed to project
owners. Any explicit submit permissions for non-project-owners on this
branch are ignored. By submitting to the `refs/meta/config` branch the
configuration of the project is changed, which can include changes to
the access rights of the project. Allowing this to be done by a
non-project-owner would open a security hole enabling editing of access
rights, and thus granting of powers beyond submitting to the
configuration.

[[category_submit_on_behalf_of]]
=== Submit (On Behalf Of)

This category permits users who have also been granted the `Submit`
permission to submit changes on behalf of another user, by using the
`on_behalf_of` field in link:rest-api-changes.html#submit-input[SubmitInput]
when link:rest-api-changes.html#submit-change[submitting using the REST API].

Note that this permission is named `submitAs` in the `project.config`
file.

[[category_view_private_changes]]
=== View Private Changes

This category permits users to view all private changes and all change edit refs.

The change owner and any explicitly added reviewers can always see
private changes (even without having the `View Private Changes` access
right assigned).


[[category_delete_own_changes]]
=== Delete Own Changes

This category permits users to delete their own changes if they are not merged
yet. This means only own changes that are open or abandoned can be deleted.

[[category_delete_changes]]
=== Delete Changes

This category permits users to delete other users' changes if they are not merged
yet. This means only changes that are open or abandoned can be deleted.

Having this permission implies having the link:#category_delete_own_changes[
Delete Own Changes] permission.

Administrators may always delete changes without having this permission.

[[category_edit_topic_name]]
=== Edit Topic Name

This category permits users to edit the topic name of a change that
is uploaded for review.

The change owner, branch owners, project owners, and site administrators
can always edit the topic name (even without having the `Edit Topic Name`
access right assigned).

Whether the topic can be edited on closed changes can be controlled
by the 'Force Edit' flag. If this flag is not set the topic can only be
edited on open changes.


[[category_edit_hashtags]]
=== Edit Hashtags

This category permits users to add or remove
link:intro-user.html#hashtags[hashtags] on a change that is uploaded for review.

The change owner, branch owners, project owners, and site administrators
can always edit or remove hashtags (even without having the `Edit Hashtags`
access right assigned).

[[category_edit_assigned_to]]
=== Edit Assignee

This category permits users to set who is assigned to a change that is
uploaded for review.

The change owner, ref owners, and the user currently assigned to a change
can always change the assignee.

[[example_roles]]
== Examples of typical roles in a project

Below follows a set of typical roles on a server and which access
rights these roles typically should be granted. You may see them as
general guidelines for a typical way to set up your project on a
brand new Gerrit instance.


[[examples_contributor]]
=== Contributor

This is the typical user on a public server. They are able to read
your project and upload new changes to it. They are able to give
feedback on other changes as well, but are unable to block or approve
any changes.

Suggested access rights to grant:

* xref:category_read[`Read`] on 'refs/heads/\*'
* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
* link:config-labels.html#label_Code-Review[`Code-Review`] with range '-1' to '+1' for 'refs/heads/*'

If it's desired to have the possibility to upload temporarily hidden
changes there's a specific permission for that.  This enables someone
to add specific reviewers for early feedback before making the change
publicly visible.


[[examples_developer]]
=== Developer

This is the typical core developer on a public server.  They are able
to read the project, upload changes to a branch.  They are allowed to
push merge commits to merge branches together.  Also, they are allowed
to forge author identity, thus handling commits belonging to others
than themselves, effectively allowing them to transfer commits
between different branches.

They are furthermore able to code review and verify commits, and
eventually submit them.  If you have an automated CI system that
builds all uploaded patch sets you might want to skip the
verification rights for the developer and let the CI system do that
exclusively.

Suggested access rights to grant:

* xref:category_read[`Read`] on 'refs/heads/\*'
* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
* xref:category_push_merge[`Push merge commit`] to 'refs/for/refs/heads/*'
* xref:category_forge_author[`Forge Author Identity`] to 'refs/heads/*'
* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-2' to '+2' for 'refs/heads/*'
* link:config-labels.html#label_Verified[`Label: Verified`] with range '-1' to '+1' for 'refs/heads/*'
* xref:category_submit[`Submit`] on 'refs/heads/*'

If the project is small or the developers are seasoned it might make
sense to give them the freedom to push commits directly to a branch.

Optional access rights to grant:

* <<category_push,`Push`>> to 'refs/heads/*'
* <<category_push_merge,`Push merge commit`>> to 'refs/heads/*'


[[examples_cisystem]]
=== CI system

A typical Continuous Integration system should be able to download new changes
to build and then leave a verdict somehow.

As an example, the popular
link:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger[gerrit-trigger plugin]
for Jenkins/Hudson can set labels at:

* The start of a build
* A successful build
* An unstable build (tests fails)
* A failed build

Usually the range chosen for this verdict is the `Verified` label.  Depending on
the size of your project and discipline of involved developers you might want
to limit access right to the +1 `Verified` label to the CI system only.  That
way it's guaranteed that submitted commits always get built and pass tests
successfully.

If the build doesn't complete successfully the CI system can set the
`Verified` label to -1.  However that means that a failed build will block
submit of the change even if someone else sets `Verified` +1.  Depending on the
project and how much the CI system can be trusted for accurate results, a
blocking label might not be feasible.  A recommended alternative is to set the
label `Code-review` to -1 instead, as it isn't a blocking label but still
shows a red label in the Gerrit UI.  Optionally, to enable the possibility to
deliver different results (build error vs unstable for instance), it's also
possible to set `Code-review` +1 as well.

If pushing new changes is granted, it's possible to automate cherry-pick of
submitted changes for upload to other branches under certain conditions.  This
is probably not the first step of what a project wants to automate however,
and so the push right can be found under the optional section.

Suggested access rights to grant, that won't block changes:

* xref:category_read[`Read`] on 'refs/heads/\*'
* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-1' to '0' for 'refs/heads/*'
* link:config-labels.html#label_Verified[`Label: Verified`] with range '0' to '+1' for 'refs/heads/*'

Optional access rights to grant:

* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-1' to '+1' for 'refs/heads/*'
* xref:category_push[`Push`] to 'refs/for/refs/heads/*'


[[examples_integrator]]
=== Integrator

Integrators are like developers but with some additional rights granted due
to their administrative role in a project.  They can upload or push any commit
with any committer email (not just their own) and they can also create new
tags and branches.

Suggested access rights to grant:

* <<examples_developer,Developer rights>>
* <<category_push,`Push`>> to 'refs/heads/*'
* <<category_push_merge,`Push merge commit`>> to 'refs/heads/*'
* <<category_forge_committer,`Forge Committer Identity`>> to 'refs/for/refs/heads/*'
* <<category_create,`Create Reference`>> to 'refs/heads/*'
* <<category_create_annotated,`Create Annotated Tag`>> to 'refs/tags/*'


[[examples_project-owner]]
=== Project owner

The project owner is almost like an integrator but with additional destructive
power in the form of being able to delete branches.  Optionally these users
also have the power to configure access rights in gits assigned to them.

[WARNING]
These users should be really knowledgeable about git, for instance knowing why
tags never should be removed from a server.  This role is granted potentially
destructive access rights and cleaning up after such a mishap could be time
consuming!

Suggested access rights to grant:

* <<examples_integrator,Integrator rights>>
* <<category_push,`Push`>> with the force option to 'refs/heads/\*' and 'refs/tags/*'

Optional access right to grant:

* <<category_owner,`Owner`>> in the gits they mostly work with.


[[examples_administrator]]
=== Administrator

The administrator role is the most powerful role known in the Gerrit universe.
This role may grant itself (or others) any access right.  By default the
<<administrators,`Administrators` group>> is the group that has this role.

Mandatory access rights:

* <<capability_administrateServer,The `Administrate Server` capability>>

Suggested access rights to grant:

* <<examples_project-owner,`Project owner rights`>>
* Any <<global_capabilities,`capabilities`>> needed by the administrator


== Enforcing site wide access policies

By granting the <<category_owner,`Owner`>> access right on the `+refs/*+` to a
group, Gerrit administrators can delegate the responsibility of maintaining
access rights for that project to that group.

In a corporate deployment it is often necessary to enforce some access
policies. An example could be that no-one can update or delete a tag, not even
the project owners. The 'ALLOW' and 'DENY' rules are not enough for this
purpose as project owners can grant themselves any access right they wish and,
thus, effectively override any inherited access rights from the
"`All-Projects`" or some other common parent project.

What is needed is a mechanism to block a permission in a parent project so
that even project owners cannot allow a blocked permission in their child
project. Still, project owners should retain the possibility to manage all
non-blocked rules as they wish. This gives best of both worlds:

* Gerrit administrators can concentrate on enforcing site wide policies
  and providing a meaningful set of default access permissions
* Project owners can manage access rights of their projects without a danger
  of violating a site wide policy


[[block]]
=== 'BLOCK' access rule

The 'BLOCK' rule can be used to take away rights from users. The BLOCK rule
works across project inheritance, from the top down, so an administrator can
use 'BLOCK' rules to enforce site-wide restrictions.

For example, if a user in the 'Foo Users' group tries to push to
'refs/heads/mater' with the permissions below, that user will be blocked

[options="header"]
|=========================================================================
|Project      | Inherits From    |Reference Name |Permissions            |
|All-Projects | -                |refs/*         |push = block Foo Users |
|Foo          | All-Projects     |refs/heads/*   |push = Foo Users       |
|=========================================================================

'BLOCK' rules are evaluated starting from the parent project, and after a 'BLOCK'
rule is found to apply, further rules are ignored. Hence, in this example, the
permissions on child-project is ignored.

----
All-Projects: project.config
  [access "refs/heads/*"]
    push = block group X

child-project: project.config
  [access "refs/heads/*"]
    exclusiveGroupPermissions = push
    push = group X
----

In this case push for group 'X' will be blocked, even though the Exclusive
flag was set for the child-project.

A 'BLOCK' rule that blocks the 'push' permission blocks any type of push,
force or not. A blocking force push rule blocks only force pushes, but
allows non-forced pushes if an 'ALLOW' rule would have permitted it.

It is also possible to block label ranges. To block a group 'X' from voting
'-2' and '+2', but keep their existing voting permissions for the '-1..+1'
range intact we would define:

----
  [access "refs/heads/*"]
    label-Code-Review = block -2..+2 group X
----

The interpretation of the 'min..max' range in case of a blocking rule is: block
every vote from '-INFINITE..min' and 'max..INFINITE'. For the example above it
means that the range '-1..+1' is not affected by this block.

=== 'BLOCK' and 'ALLOW' rules in the same access section

When an access section of a project contains a 'BLOCK' and an 'ALLOW' rule for
the same permission then this 'ALLOW' rule overrides the 'BLOCK' rule:

----
  [access "refs/heads/*"]
    push = block group X
    push = group Y
----

In this case a user which is a member of the group 'Y' will still be allowed to
push to 'refs/heads/*' even if it is a member of the group 'X'.

=== 'BLOCK' and 'ALLOW' rules in the same project with the Exclusive flag

When a project contains a 'BLOCK' and 'ALLOW' that uses the Exclusive flag in a
more specific reference, the 'ALLOW' rule with the Exclusive flag will override
the 'BLOCK' rule:

----
  [access "refs/*"]
    read = block group X

  [access "refs/heads/*"]
    exclusiveGroupPermissions = read
    read = group X
----

In this case a user which is a member of the group 'X' will still be allowed to
read 'refs/heads/*'.

[NOTE]
An 'ALLOW' rule overrides a 'BLOCK' rule only when both of them are
inside the same access section of the same project. An 'ALLOW' rule in a
different access section of the same project or in any access section in an
inheriting project cannot override a 'BLOCK' rule.


=== Examples

The following examples show some possible use cases for the 'BLOCK' rules.

==== Make sure no one can update or delete a tag

This requirement is quite common in a corporate deployment where
reproducibility of a build must be guaranteed. To achieve that we block 'push'
permission for the <<anonymous_users,'Anonymous Users'>> in "`All-Projects`":

----
  [access "refs/tags/*"]
    push = block group Anonymous Users
----

By blocking the <<anonymous_users,'Anonymous Users'>> we effectively block
everyone as everyone is a member of that group. Note that the permission to
create a tag is still necessary. Assuming that only <<category_owner,project
owners>> are allowed to create tags, we would extend the example above:

----
  [access "refs/tags/*"]
    push = block group Anonymous Users
    create = group Project Owners
    pushTag = group Project Owners
----


==== Let only a dedicated group vote in a special category

Assume there is a more restrictive process for submitting changes in stable
release branches which is manifested as a new voting category
'Release-Process'. Assume we want to make sure that only a 'Release Engineers'
group can vote in this category and that even project owners cannot approve
this category. We have to block everyone except the 'Release Engineers' to vote
in this category and, of course, allow 'Release Engineers' to vote in that
category. In the "`All-Projects`" we define the following rules:

----
  [access "refs/heads/stable*"]
    label-Release-Process = block -1..+1 group Anonymous Users
    label-Release-Process = -1..+1 group Release Engineers
----

[[global_capabilities]]
== Global Capabilities

The global capabilities control actions that the administrators of
the server can perform which usually affect the entire
server in some way.  The administrators may delegate these
capabilities to trusted groups of users.

Delegation of capabilities allows groups to be granted a subset of
administrative capabilities without being given complete
administrative control of the server.  This makes it possible to
keep fewer users in the administrators group, even while spreading
much of the server administration burden out to more users.

Global capabilities are assigned to groups in the access rights settings
of the root project ("`All-Projects`").

Below you find a list of capabilities available:


[[capability_accessDatabase]]
=== Access Database

Allow users to view code review metadata refs in repositories.


[[capability_administrateServer]]
=== Administrate Server

This is in effect the owner and administrator role of the Gerrit
instance. Any members of a group granted this capability will be
able to grant any access right to any group. They will also have all
capabilities granted to them automatically.

In most installations only those users who have direct filesystem and
database access should be granted this capability.

This capability does not imply any other access rights. Users that have
this capability do not automatically get code review approval or submit
rights in projects. This is a feature designed to permit administrative
users to otherwise access Gerrit as any other normal user would,
without needing two different accounts.


[[capability_batchChangesLimit]]
=== Batch Changes Limit

Allow site administrators to configure the batch changes limit for
users to override the system config
link:config-gerrit.html#receive.maxBatchChanges['receive.maxBatchChanges'].

Administrators can add a global block to `All-Projects` with group(s)
that should have different limits.

When applying a batch changes limit to a user the largest value
granted by any of their groups is used. 0 means no limit.


[[capability_createAccount]]
=== Create Account

Allow link:cmd-create-account.html[account creation over the ssh prompt].
This capability allows the granted group members to create non-interactive
service accounts.  These service accounts are generally used for automation
and made to be members of the
link:access-control.html#non-interactive_users['Non-Interactive users'] group.


[[capability_createGroup]]
=== Create Group

Allow group creation.  Groups are used to grant users access to different
actions in projects.  This capability allows the granted group members to
either link:cmd-create-group.html[create new groups via ssh] or via the web UI.


[[capability_createProject]]
=== Create Project

Allow project creation.  This capability allows the granted group to
either link:cmd-create-project.html[create new git projects via ssh]
or via the web UI.


[[capability_emailReviewers]]
=== Email Reviewers

Allow or deny sending email to change reviewers and watchers.  This can be used
to deny build bots from emailing reviewers and people who watch the change.
Instead, only the authors of the change and those who starred it will be
emailed.  The allow rules are evaluated before deny rules, however the default
is to allow emailing, if no explicit rule is matched.


[[capability_flushCaches]]
=== Flush Caches

Allow the flushing of Gerrit's caches.  This capability allows the granted
group to link:cmd-flush-caches.html[flush some or all Gerrit caches via ssh].

[NOTE]
This capability doesn't imply permissions to the show-caches command.  For that
you need the <<capability_viewCaches,view caches capability>>.


[[capability_kill]]
=== Kill Task

Allow the operation of the link:cmd-kill.html[kill command over ssh].  The
kill command ends tasks that currently occupy the Gerrit server, usually
a replication task or a user initiated task such as an upload-pack or
receive-pack.

[[capability_maintainServer]]
=== Maintain Server

Allow basic, constrained server maintenance tasks, such as flushing caches and
reindexing changes. Does not grant arbitrary database access, read/write, or
ACL management permissions, as might the
<<capability_administrateServer,administrate server capability>>.

Implies the following capabilities:

* <<capability_flushCaches,Flush Caches>>
* <<capability_kill,Kill Task>>
* <<capability_runGC,Run Garbage Collection>>
* <<capability_viewCaches,View Caches>>
* <<capability_viewQueue,View Queue>>

[[capability_modifyAccount]]
=== Modify Account

Allow to link:cmd-set-account.html[modify accounts over the ssh prompt].
This capability allows the granted group members to modify any user account
setting. In addition this capability is required to view secondary emails
of other accounts.

[[capability_priority]]
=== Priority

This capability allows users to use
link:config-gerrit.html#sshd.batchThreads[the thread pool reserved] for
link:access-control.html#non-interactive_users['Non-Interactive Users'].
It's a binary value in that granted users either have access to the thread
pool, or they don't.

There are three modes for this capability and they're listed by rising
priority:

No capability configured.::
The user isn't a member of a group with any priority capability granted. By
default the user is then in the 'INTERACTIVE' thread pool.

'BATCH'::
If there's a thread pool configured for 'Non-Interactive Users' and a user is
granted the priority capability with the 'BATCH' mode selected, the user ends
up in the separate batch user thread pool. This is true unless the user is
also granted the below 'INTERACTIVE' option.

'INTERACTIVE'::
If a user is granted the priority capability with the 'INTERACTIVE' option,
regardless if they also have the 'BATCH' option or not, they are in the
'INTERACTIVE' thread pool.


[[capability_queryLimit]]
=== Query Limit

Allow site administrators to configure the query limit for users to
be above the default hard-coded value of 500.  Administrators can add
a global block to `All-Projects` with group(s) that should have different
limits.

When applying a query limit to a user the largest value granted by
any of their groups is used.

This limit applies not only to the link:cmd-query.html[`gerrit query`]
command, but also to the web UI results pagination size in the new
PolyGerrit UI and, limited to the full project list, in the old GWT UI.


[[capability_readAs]]
=== Read As

Allow users to impersonate any user to see which refs they can read.


[[capability_runAs]]
=== Run As

Allow users to impersonate any other user with the `X-Gerrit-RunAs`
HTTP header on REST API calls, or the link:cmd-suexec.html[suexec]
SSH command.

When impersonating an administrator the Administrate Server capability
is not honored.  This security feature tries to prevent a role with
Run As capability from modifying the access controls in All-Projects,
however modification may still be possible if the impersonated user
has permission to push or submit changes on `refs/meta/config`.  Run
As also blocks using most capabilities including Create User, Run
Garbage Collection, etc., unless the capability is also explicitly
granted to a group the administrator is a member of.

Administrators do not automatically inherit this capability; it must
be explicitly granted.


[[capability_runGC]]
=== Run Garbage Collection

Allow users to run the Git garbage collection for the repositories of
all projects.


[[capability_streamEvents]]
=== Stream Events

Allow performing streaming of Gerrit events. This capability
allows the granted group to
link:cmd-stream-events.html[stream Gerrit events via ssh].


[[capability_viewAccess]]
=== View Access

Allow checking access rights for arbitrary (user, project) pairs,
using the link:rest-api-projects.html#check-access[check.access]
endpoint

[[capability_viewAllAccounts]]
=== View All Accounts

Allow viewing all accounts for purposes of auto-completion, regardless
of link:config-gerrit.html#accounts.visibility[accounts.visibility]
setting.

This capability allows to view all accounts but not all account data.
E.g. secondary emails of all accounts can only be viewed with the
link:#capability_modifyAccount[Modify Account] capability.


[[capability_viewCaches]]
=== View Caches

Allow querying for status of Gerrit's internal caches.  This capability allows
the granted group to
link:cmd-show-caches.html[look at some or all Gerrit caches via ssh].


[[capability_viewConnections]]
=== View Connections

Allow querying for status of Gerrit's current client connections.  This
capability allows the granted group to
link:cmd-show-connections.html[look at Gerrit's current connections via ssh].


[[capability_viewPlugins]]
=== View Plugins

Allow viewing the list of installed plugins.


[[capability_viewQueue]]
=== View Queue

Allow querying for status of Gerrit's internal task queue.  This capability
allows the granted group to
link:cmd-show-queue.html[look at the Gerrit task queue via ssh].


[[reference]]
== Permission evaluation reference

Permission evaluation is expressed in the following concepts:

* PermisssionRule: a single combination of {ALLOW, DENY, BLOCK} and
group, and optionally a vote range and an 'exclusive' bit.

* Permission: groups PermissionRule by permission name. All
PermissionRules for same access type (eg. "read", "push") are grouped
into a Permission implicitly. The exclusive bit lives here.

* AccessSection: ties a list of Permissions to a single ref pattern.
Each AccessSection comes from a single project.



Here is how these play out in a link:config-project-config.html[project.config] file:

----
  # An AccessSection
  [access "refs/heads/stable/*"]
     exclusiveGroupPermissions = create

     # Each of the following lines corresponds to a PermissionRule
     # The next two PermissionRule together form the "read" Permission
     read = group Administrators
     read = group Registered Users

     # A Permission with a block and block-override
     create = block group Registered Users
     create = group Project Owners

     # A Permission and PermissionRule for a label
     label-Code-Review = -2..+2 group Project Owners
----

=== Ref permissions

Access to refs can be blocked, allowed or denied.

==== BLOCK

For blocking access, all rules marked BLOCK are tested, and if one
such rule matches, the user is denied access.

The rules are ordered by inheritance, starting from All-Projects down.
Within a project, more specific ref patterns come first. The downward
ordering lets administrators enforce access rules across all projects
in a site.

BLOCK rules can have exceptions defined on the same project (eg. BLOCK
anonymous users, ie. everyone, but make an exception for Admin users),
either by:

1. adding ALLOW PermissionRules in the same Permission. This implies
they apply to the same ref pattern.

2. adding an ALLOW Permission in the same project with a more specific
ref pattern, but marked "exclusive". This allows them to apply to
different ref patterns.

Such additions not only bypass BLOCK rules, but they will also grant
permissions when they are processed in the ALLOW/DENY processing, as
described in the next subsection.

==== ALLOW

For allowing access, all ALLOW/DENY rules that might apply to a ref
are tested until one granting access is found, or until either an
"exclusive" rule ends the search, or all rules have been tested.

The rules are ordered from specific ref patterns to general patterns,
and for equally specific patterns, from originating project up to
All-Projects.

This ordering lets project owners apply permissions specific to their
project, overwriting the site defaults specified in All-Projects.

==== DENY

DENY is processed together with ALLOW.

As said, during ALLOW/DENY processing, rules are tried out one by one.
For each (permission, ref-pattern, group) only a single rule
ALLOW/DENY rule is picked. If that first rule is a DENY rule, any
following ALLOW rules for the same (permission, ref-pattern, group)
will be ignored, canceling out their effect.

DENY is confusing because it only works on a specific (ref-pattern,
group) pair. The parent project can undo the effect of a DENY rule by
introducing an extra rule which features a more general ref pattern or
a different group.

==== DENY/ALLOW example

Consider the ref "refs/a" and the following configuration:
----

child-project: project.config
    [access "refs/a"]
      read = deny group A

All-Projects: project.config
    [access "refs/a"]
      read = group A      # ALLOW
    [access "refs/*"]
      read = group B      # ALLOW
----

When determining access, first "read = DENY group A" on "refs/a" is
encountered. The following rule to consider is "ALLOW read group A" on
"refs/a". The latter rule applies to the same (permission,
ref-pattern, group) tuple, so it it is ignored.

The DENY rule does not affect the last rule for "refs/*", since that
has a different ref pattern and a different group. If group B is a
superset of group A, the last rule will still grant group A access to
"refs/a".


==== Double use of exclusive

An 'exclusive' permission is evaluated both during BLOCK processing
and during ALLOW/DENY: when looking BLOCK, 'exclusive' stops the
search downward, while the same permission in the ALLOW/DENY
processing will stop looking upward for further rule matches

==== Force permission

The 'force' setting may be set on ALLOW and BLOCK rules. In the case
of ALLOW, the 'force' option makes the permission stronger (allowing
both forced and unforced actions). For BLOCK, the 'force' option makes
it weaker (the BLOCK with 'force' only blocks forced actions).


=== Labels

Labels use the same mechanism, with the following observations:

* The 'force' setting has no effect on label ranges.

* BLOCK specifies the values that a group cannot vote, eg.
+
----
  label-Code-Review = block -2..+2 group Anonymous Users
----
+
prevents all users from voting -2 or +2.

* DENY works for votes too, with the same caveats

* The blocked vote range is the union of the all the blocked vote
ranges across projects, so in
+
----
All-Projects: project.config
     label-Code-Review = block -2..+1 group A

Child-Project: project-config
     label-Code-Review = block -1..+2 group A
----
+
members of group A cannot vote at all in the Child-Project.


* The allowed vote range is the union of vote ranges allowed by all of
the ALLOW rules. For example, in
+
----
     label-Code-Review = -2..+1 group A
     label-Code-Review = -1..+2 group B
----
+
a user that is both in A and B can vote -2..2.


GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
