blob: 2a019cad88de76835097eba34ab2833e3e43e41c [file] [log] [blame]
Marian Harbachebeb1542019-12-13 10:42:46 +01001:linkattrs:
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08002= Gerrit Code Review - Access Controls
Shawn O. Pearce4b122b82009-02-18 18:22:14 -08003
4Access controls in Gerrit are group based. Every user account is a
5member of one or more groups, and access and privileges are granted
Matt Fischer620255a2011-03-22 14:28:23 -05006to those groups. Access rights cannot be granted to individual
7users.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -08008
Jeff Gastonca20ec62018-10-16 12:42:35 -04009To view/edit the access controls for a specific project, first
10navigate to the projects page: for example,
Marian Harbach34253372019-12-10 18:01:31 +010011https://gerrit-review.googlesource.com/admin/repos/[role=external,window=_blank]. Then click on
Jeff Gastonca20ec62018-10-16 12:42:35 -040012the individual project, and then click Access. This will bring you
13to a url that looks like
Marian Harbach34253372019-12-10 18:01:31 +010014https://gerrit-review.googlesource.com/admin/repos/gerrit,access[role=external,window=_blank]
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080015
Edwin Kempin4bf01962014-04-16 16:47:10 +020016[[system_groups]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080017== System Groups
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080018
Anita Kuno178f64b2014-04-22 18:52:28 -040019Gerrit comes with the following system groups:
Khai Do4245e6f2013-10-11 18:14:31 +020020
Khai Do4245e6f2013-10-11 18:14:31 +020021* Anonymous Users
22* Change Owner
Khai Do4245e6f2013-10-11 18:14:31 +020023* Project Owners
24* Registered Users
25
26The system groups are assigned special access and membership management
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -070027privileges.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080028
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +020029
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010030[[anonymous_users]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080031=== Anonymous Users
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080032
33All users are automatically a member of this group. Users who are
34not signed in are a member of only this group, and no others.
35
36Any access rights assigned to this group are inherited by all users.
37
38Administrators and project owners can grant access rights to this
39group in order to permit anonymous users to view project changes,
40without requiring sign in first. Currently it is only worthwhile
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +010041to grant `Read` access to this group as Gerrit requires an account
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080042identity for all other operations.
43
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +020044
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010045[[project_owners]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080046=== Project Owners
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010047
48Access rights assigned to this group are always evaluated within the
49context of a project to which the access rights apply. These rights
50therefore apply to all the users who are owners of this project.
51
52By assigning access rights to this group on a parent project Gerrit
53administrators can define a set of default access rights for
Fredrik Luthanderea13ca52011-12-29 11:36:48 +010054<<category_owner,project owners>>. Child projects inherit these
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010055access rights where they are resolved to the users that own the child
56project. Having default access rights for
Fredrik Luthanderea13ca52011-12-29 11:36:48 +010057<<category_owner,project owners>> assigned on a parent project may
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010058avoid the need to initially configure access rights for
59newly created child projects.
60
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +020061
Khai Do4245e6f2013-10-11 18:14:31 +020062[[change_owner]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080063=== Change Owner
Khai Do4245e6f2013-10-11 18:14:31 +020064
65Access rights assigned to this group are always evaluated within the
66context of a change to which the access rights apply. These rights
67therefore apply to the user who is the owner of this change.
68
69It is typical to assign a label to this group, allowing the change
70owner to vote on his change, but not actually cause it to become
71approved or rejected.
72
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010073[[registered_users]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080074=== Registered Users
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080075
76All signed-in users are automatically a member of this group (and
Fredrik Luthander54abc352012-01-20 16:18:41 +010077also <<anonymous_users,'Anonymous Users'>>, see above).
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080078
79Any access rights assigned to this group are inherited by all
80users as soon as they sign-in to Gerrit. If OpenID authentication
81is being employed, moving from only 'Anonymous Users' into this
82group is very easy. Caution should be taken when assigning any
83permissions to this group.
84
Dave Borowitz01c1b1f2013-02-27 13:49:04 -080085It is typical to assign `Code-Review -1..+1` to this group,
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080086allowing signed-in users to vote on a change, but not actually
87cause it to become approved or rejected.
88
89Registered users are always permitted to make and publish comments
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +010090on any change in any project they have `Read` access to.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080091
92
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -070093== Predefined Groups
94
95Predefined groups differs from system groups by the fact that they
Youssef Elghareeb655023f2020-11-11 13:09:33 +010096exist in NoteDb under refs/meta/group-names (like normal groups) but predefined
97groups are created on Gerrit site initialization and unique UUIDs are assigned
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -070098to those groups. These UUIDs are different on different Gerrit sites.
99
100Gerrit comes with two predefined groups:
101
102* Administrators
Patrick Hiesele587c402020-08-07 16:11:29 +0200103* Service Users
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700104
105
106[[administrators]]
107=== Administrators
108
Edwin Kempin17287422016-04-07 08:44:39 +0200109This is a predefined group, created on Gerrit site initialization, that
110has the capability link:access-control.html#capability_administrateServer[
111'Administrate Server'] assigned.
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700112
Edwin Kempin17287422016-04-07 08:44:39 +0200113It is a normal Gerrit group without magic. This means if you remove
114the 'Administrate Server' capability from it, its members are no longer
115Gerrit administrators, despite the group name. The group may also be
116renamed.
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700117
Antoine Mussoc81f6682020-12-22 12:01:53 +0100118anchor:non-interactive_users[]
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700119
Antoine Mussoc81f6682020-12-22 12:01:53 +0100120[[service_users]]
Patrick Hiesele587c402020-08-07 16:11:29 +0200121=== Service Users
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700122
123This is the Gerrit "batch" identity. The capabilities
124link:access-control.html#capability_priority['Priority BATCH'] and
125link:access-control.html#capability_streamEvents['Stream Events']
126are assigned to this predefined group on Gerrit site creation.
127
128The members of this group are not expected to perform interactive
129operations on the Gerrit web front-end.
130
131However, sometimes such a user may need a separate thread pool in
132order to prevent it from grabbing threads from the interactive users.
133
134These users live in a second thread pool, which separates operations
Patrick Hiesele587c402020-08-07 16:11:29 +0200135made by the service users from the ones made by the interactive
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700136users. This ensures that the interactive users can keep working when
137resources are tight.
138
Antoine Mussoc81f6682020-12-22 12:01:53 +0100139Before Gerrit 3.3, the 'Service Users' group was named 'Non-Interactive Users'.
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700140
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800141== Account Groups
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800142
143Account groups contain a list of zero or more user account members,
144added individually by a group owner. Any user account listed as
145a group member is given any access rights granted to the group.
146
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800147Every group has one other group designated as its owner. Users who
148are members of the owner group can:
149
Fredrik Luthander8fa3d262011-11-07 17:04:01 +0100150* Add users and other groups to this group
151* Remove users and other groups from this group
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800152* Change the name of this group
153* Change the description of this group
154* Change the owner of this group, to another group
155
156It is permissible for a group to own itself, allowing the group
157members to directly manage who their peers are.
158
159Newly created groups are automatically created as owning themselves,
160with the creating user as the only member. This permits the group
161creator to add additional members, and change the owner to another
162group if desired.
163
164It is somewhat common to create two groups at the same time,
165for example `Foo` and `Foo-admin`, where the latter group
166`Foo-admin` owns both itself and also group `Foo`. Users who
167are members of `Foo-admin` can thus control the membership of
168`Foo`, without actually having the access rights granted to `Foo`.
169This configuration can help prevent accidental submits when the
170members of `Foo` have submit rights on a project, and the members of
171`Foo-admin` typically do not need to have such rights.
172
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200173
Thanh Ha6eed43f2013-04-11 21:03:55 -0400174[[ldap_groups]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800175== LDAP Groups
Thanh Ha6eed43f2013-04-11 21:03:55 -0400176
177LDAP groups are Account Groups that are maintained inside of your
178LDAP instance. If you are using LDAP to manage your groups they will
179not appear in the Groups list. However you can use them just like
180regular Account Groups by prefixing your group with "ldap/" in the
181Access Control for a project. For example "ldap/foo-project" will
182add the LDAP "foo-project" group to the access list.
183
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800184
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800185== Project Access Control Lists
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800186
lincolnfa7bdd32010-04-22 14:23:05 -0300187A system wide access control list affecting all projects is stored in
Shawn O. Pearcea0631822011-06-14 11:18:18 -0700188project "`All-Projects`". This inheritance can be configured
lincolnfa7bdd32010-04-22 14:23:05 -0300189through link:cmd-set-project-parent.html[gerrit set-project-parent].
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800190
Gal Paikine871aaa2020-06-26 14:05:53 +0300191When projects are set as parent projects, the child projects inherit
192all of the parent's access rights. "`All-Projects`" is treated as a
193parent of all projects.
194
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800195Per-project access control lists are also supported.
196
197Users are permitted to use the maximum range granted to any of their
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800198groups on a label. For example, a user is a member of `Foo Leads`, and
199the following ACLs are granted on a project:
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800200
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100201[options="header"]
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800202|===================================================
203|Group |Reference Name |Label |Range
204|Anonymous Users |refs/heads/* |Code-Review|-1..+1
205|Registered Users|refs/heads/* |Code-Review|-1..+2
206|Foo Leads |refs/heads/* |Code-Review|-2..0
207|===================================================
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800208
209Then the effective range permitted to be used by the user is
210`-2..+2`, as the user is a member of all three groups (see above
211about the system groups) and the maximum range is chosen (so the
212lowest value granted to any group, and the highest value granted
213to any group).
214
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800215Reference-level access control is also possible.
216
217Permissions can be set on a single reference name to match one
218branch (e.g. `refs/heads/master`), or on a reference namespace
Jonathan Nieder5758f182015-03-30 11:28:55 -0700219(e.g. `+refs/heads/*+`) to match any branch starting with that
Sebastian Schuberth7bcfbaf2016-05-23 14:06:03 +0200220prefix. So a permission with `+refs/heads/*+` will match all of
221`refs/heads/master`, `refs/heads/experimental`, `refs/heads/release/1.0` etc.
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800222
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700223Reference names can also be described with a regular expression
Edwin Kempina2bf0832011-09-08 14:23:30 +0200224by prefixing the reference name with `^`. For example
225`^refs/heads/[a-z]{1,8}` matches all lower case branch names
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700226between 1 and 8 characters long. Within a regular expression `.`
227is a wildcard matching any character, but may be escaped as `\.`.
Marian Harbach34253372019-12-10 18:01:31 +0100228The link:http://www.brics.dk/automaton/[dk.brics.automaton library,role=external,window=_blank]
Magnus Bäcke5611832011-02-02 08:57:15 +0100229is used for evaluation of regular expression access control
230rules. See the library documentation for details on this
Doug Claare852eb32016-03-18 14:43:28 -0700231particular regular expression flavor. One quirk is that the
232shortest possible pattern expansion must be a valid ref name:
233thus `^refs/heads/.*/name` will fail because `refs/heads//name`
234is not a valid reference, but `^refs/heads/.+/name` will work.
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700235
Edwin Kempin311d5702017-07-28 15:10:24 +0200236[[sharded-user-id]]
Edwin Kempinad6f15b2016-05-04 18:20:05 +0200237References can have the user name or the sharded account ID of the
238current user automatically included, creating dynamic access controls
239that change to match the currently logged in user. For example to
240provide a personal sandbox space to all developers,
241`+refs/heads/sandbox/${username}/*+` allows the user 'joe' to use
242'refs/heads/sandbox/joe/foo'. The sharded account ID can be used to
243give users access to their user branch in the `All-Users` repository,
244for example `+refs/users/${shardeduserid}+` is resolved to
245'refs/users/23/1011123' if the account ID of the current user is
246`1011123`.
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700247
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800248When evaluating a reference-level access right, Gerrit will use
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700249the full set of access rights to determine if the user
250is allowed to perform a given action. For example, if a user is a
251member of `Foo Leads`, they are reviewing a change destined for
252the `refs/heads/qa` branch, and the following ACLs are granted
253on the project:
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800254
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100255[options="header"]
Fredrik Luthander54abc352012-01-20 16:18:41 +0100256|===============================================================
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800257|Group |Reference Name|Label |Range |Exclusive
258|Registered Users |refs/heads/* |Code-Review| -1..+1 |
259|Foo Leads |refs/heads/* |Code-Review| -2..+2 |
260|QA Leads |refs/heads/qa |Code-Review| -2..+2 |
Fredrik Luthander54abc352012-01-20 16:18:41 +0100261|===============================================================
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800262
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700263Then the effective range permitted to be used by the user is
264`-2..+2`, as the user's membership of `Foo Leads` effectively grant
265them access to the entire reference space, thanks to the wildcard.
266
267Gerrit also supports exclusive reference-level access control.
268
269It is possible to configure Gerrit to grant an exclusive ref level
270access control so that only users of a specific group can perform
Fredrik Luthander54abc352012-01-20 16:18:41 +0100271an operation on a project/reference pair. This is done by ticking
272the exclusive flag when setting the permission for the
273`refs/heads/qa` branch.
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700274
275For example, if a user who is a member of `Foo Leads` tries to
276review a change destined for branch `refs/heads/qa` in a project,
277and the following ACLs are granted:
278
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100279[options="header"]
Fredrik Luthander54abc352012-01-20 16:18:41 +0100280|==============================================================
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800281|Group |Reference Name|Label |Range |Exclusive
282|Registered Users|refs/heads/* |Code-Review| -1..+1 |
283|Foo Leads |refs/heads/* |Code-Review| -2..+2 |
284|QA Leads |refs/heads/qa |Code-Review| -2..+2 |X
Fredrik Luthander54abc352012-01-20 16:18:41 +0100285|==============================================================
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700286
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800287Then this user will not have `Code-Review` rights on that change,
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700288since there is an exclusive access right in place for the
289`refs/heads/qa` branch. This allows locking down access for a
290particular branch to a limited set of users, bypassing inherited
291rights and wildcards.
292
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800293In order to grant the ability to `Code-Review` to the members of
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700294`Foo Leads`, in `refs/heads/qa` then the following access rights
295would be needed:
296
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100297[options="header"]
Fredrik Luthander54abc352012-01-20 16:18:41 +0100298|==============================================================
299|Group |Reference Name|Category |Range |Exclusive
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800300|Registered Users|refs/heads/* |Code-Review| -1..+1 |
301|Foo Leads |refs/heads/* |Code-Review| -2..+2 |
302|QA Leads |refs/heads/qa |Code-Review| -2..+2 |X
303|Foo Leads |refs/heads/qa |Code-Review| -2..+2 |
Fredrik Luthander54abc352012-01-20 16:18:41 +0100304|==============================================================
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700305
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200306
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800307=== OpenID Authentication
Shawn O. Pearcea2299662009-02-25 14:34:40 -0800308
309If the Gerrit instance is configured to use OpenID authentication,
310an account's effective group membership will be restricted to only
311the `Anonymous Users` and `Registered Users` groups, unless *all*
312of its OpenID identities match one or more of the patterns listed
Shawn O. Pearced7c026d2009-08-05 20:11:22 -0700313in the `auth.trustedOpenID` list from `gerrit.config`.
Shawn O. Pearcea2299662009-02-25 14:34:40 -0800314
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200315
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800316=== All Projects
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800317
Shawn O. Pearcea0631822011-06-14 11:18:18 -0700318Any access right granted to a group within `All-Projects`
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800319is automatically inherited by every other project in the same
320Gerrit instance. These rights can be seen, but not modified,
321in any other project's `Access` administration tab.
322
Fredrik Luthanderd9960882011-11-08 01:42:19 +0100323Only members of the groups with the `Administrate Server` capability
324may edit the access control list for `All-Projects`. By default this
325capability is given to the group `Administrators`, but can be given
326to more groups.
Shawn O. Pearcee2c2a222010-05-11 13:43:45 -0700327
328Ownership of this project cannot be delegated to another group.
329This restriction is by design. Granting ownership to another
330group gives nearly the same level of access as membership in
331`Administrators` does, as group members would be able to alter
Fredrik Luthanderd9960882011-11-08 01:42:19 +0100332permissions for every managed project including global capabilities.
Shawn O. Pearcee2c2a222010-05-11 13:43:45 -0700333
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200334
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800335=== Per-Project
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800336
Fredrik Luthanderda867882011-12-21 18:28:40 +0100337The per-project ACL is evaluated before the global `All-Projects` ACL,
338permitting some limited override capability to project owners. This
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100339behavior is generally only useful on the `Read` category when
340granting 'DENY' within a specific project to deny a group access.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800341
342
Fredrik Luthander98030252012-04-13 11:01:22 +0200343[[references]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800344== Special and magic references
Fredrik Luthander98030252012-04-13 11:01:22 +0200345
346The reference namespaces used in git are generally two, one for branches and
347one for tags:
348
349* +refs/heads/*+
350* +refs/tags/*+
351
352However, every reference under +refs/*+ is really available, and in Gerrit this
353opportunity for giving other refs a special meaning is used. In Gerrit they
354are sometimes used as magic/virtual references that give the push to Gerrit a
355special meaning.
356
357
358[[references_special]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800359=== Special references
Fredrik Luthander98030252012-04-13 11:01:22 +0200360
361The special references have content that's either generated by Gerrit or
362contains important project configuration that Gerrit needs. When making
363changes to these references, Gerrit will take extra precautions to verify the
364contents compatibility at upload time.
365
366
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800367==== refs/changes/*
Fredrik Luthander98030252012-04-13 11:01:22 +0200368
369Under this namespace each uploaded patch set for every change gets a static
370reference in their git. The format is convenient but still intended to scale to
371hundreds of thousands of patch sets. To access a given patch set you will
372need the change number and patch set number.
373
Yuxuan 'fishy' Wangd85b6872013-11-15 11:47:46 -0800374--
Fredrik Luthander98030252012-04-13 11:01:22 +0200375'refs/changes/'<last two digits of change number>/
376 <change number>/
377 <patch set number>
Yuxuan 'fishy' Wangd85b6872013-11-15 11:47:46 -0800378--
Fredrik Luthander98030252012-04-13 11:01:22 +0200379
380You can also find these static references linked on the page of each change.
381
382
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800383==== refs/meta/config
Fredrik Luthander98030252012-04-13 11:01:22 +0200384
Matt Baker3a40c6d2013-11-26 21:01:17 -0700385This is where the Gerrit configuration of each project resides. This
Fredrik Luthander98030252012-04-13 11:01:22 +0200386branch contains several files of importance: +project.config+, +groups+ and
Matt Baker3a40c6d2013-11-26 21:01:17 -0700387+rules.pl+. Together they control access and behavior during the change
Fredrik Luthander98030252012-04-13 11:01:22 +0200388review process.
389
390
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800391==== refs/meta/dashboards/*
Fredrik Luthander98030252012-04-13 11:01:22 +0200392
393There's a dedicated page where you can read more about
394link:user-dashboards.html[User Dashboards].
395
396
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800397==== refs/notes/review
Fredrik Luthander98030252012-04-13 11:01:22 +0200398
399Autogenerated copy of review notes for all changes in the git. Each log entry
400on the refs/notes/review branch also references the patch set on which the
401review is made. This functionality is provided by the review-notes plugin.
402
403
404[[references_magic]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800405=== Magic references
Fredrik Luthander98030252012-04-13 11:01:22 +0200406
407These are references with added functionality to them compared to a regular
408git push operation.
409
Edwin Kempin4bf01962014-04-16 16:47:10 +0200410[[refs_for]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800411==== refs/for/<branch ref>
Fredrik Luthander98030252012-04-13 11:01:22 +0200412
413Most prominent is the `refs/for/<branch ref>` reference which is the reference
414upon which we build the code review intercept before submitting a commit to
415the branch it's uploaded to.
416
417Further documentation on how to push can be found on the
418link:user-upload.html#push_create[Upload changes] page.
419
420
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200421[[access_categories]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800422== Access Categories
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800423
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200424Gerrit has several permission categories that can be granted to groups
425within projects, enabling functionality for that group's members.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800426
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200427
Chad Horohoe029c85a2012-06-07 16:10:14 -0400428[[category_abandon]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800429=== Abandon
Chad Horohoe029c85a2012-06-07 16:10:14 -0400430
431This category controls whether users are allowed to abandon changes
432to projects in Gerrit. It can give permission to abandon a specific
433change to a given ref.
434
Aaron Gableb9b4ba92016-11-08 14:44:36 -0800435The uploader of a change, anyone granted the <<category_owner,`Owner`>>
436permission at the ref or project level, and anyone granted the
437<<capability_administrateServer,`Administrate Server`>>
438permission can also Abandon changes.
439
David Pursehousec795eb12013-07-05 14:20:28 +0900440This also grants the permission to restore a change if the user also
441has link:#category_push[push permission] on the change's destination
442ref.
Chad Horohoe35ced0a2012-06-27 19:20:34 -0400443
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200444
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100445[[category_create]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800446=== Create Reference
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100447
448The create reference category controls whether it is possible to
449create new references, branches or tags. This implies that the
450reference must not already exist, it's not a destructive permission
David Pursehouse221d4f62012-06-08 17:38:08 +0900451in that you can't overwrite or remove any previously existing
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100452references (and also discard any commits in the process).
453
454It's probably most common to either permit the creation of a single
455branch in many gits (by granting permission on a parent project), or
456to grant this permission to a name pattern of branches.
457
458This permission is often given in conjunction with regular push
459branch permissions, allowing the holder of both to create new branches
460as well as bypass review for new commits on that branch.
461
David Pursehouse221d4f62012-06-08 17:38:08 +0900462To push lightweight (non-annotated) tags, grant
Jonathan Nieder5758f182015-03-30 11:28:55 -0700463`Create Reference` for reference name `+refs/tags/*+`, as lightweight
Edwin Kempin94db6b62016-09-02 14:37:17 +0200464tags are implemented just like branches in Git. To push a lightweight
465tag on a new commit (commit not reachable from any branch/tag) grant
Edwin Kempin439dd1f2016-09-05 16:25:12 +0200466`Push` permission on `+refs/tags/*+` too. The `Push` permission on
467`+refs/tags/*+` also allows fast-forwarding of lightweight tags.
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100468
469For example, to grant the possibility to create new branches under the
470namespace `foo`, you have to grant this permission on
Jonathan Nieder5758f182015-03-30 11:28:55 -0700471`+refs/heads/foo/*+` for the group that should have it.
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100472Finally, if you plan to grant each user a personal namespace in
473where they are free to create as many branches as they wish, you
474should grant the create reference permission so it's possible
475to create new branches. This is done by using the special
476`${username}` keyword in the reference pattern, e.g.
Jonathan Nieder5758f182015-03-30 11:28:55 -0700477`+refs/heads/sandbox/${username}/*+`. If you do, it's also recommended
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100478you grant the users the push force permission to be able to clean up
479stale branches.
480
Edwin Kempin4666bd92016-09-07 11:43:59 +0200481[[category_delete]]
482=== Delete Reference
483
484The delete reference category controls whether it is possible to delete
485references, branches or tags. It doesn't allow any other update of
486references.
487
488Deletion of references is also possible if `Push` with the force option
489is granted, however that includes the permission to fast-forward and
Brian Bamsch2f6d7142017-05-23 14:41:30 -0700490force-update references to existing and new commits. Being able to push
Edwin Kempin4666bd92016-09-07 11:43:59 +0200491references for new commits is bad if bypassing of code review must be
492prevented.
493
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100494
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100495[[category_forge_author]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800496=== Forge Author
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100497
498Normally Gerrit requires the author and the committer identity
499lines in a Git commit object (or tagger line in an annotated tag) to
500match one of the registered email addresses of the uploading user.
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100501This permission allows users to bypass parts of that validation, which
502may be necessary when mirroring changes from an upstream project.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100503
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100504Permits the use of an unverified author line in commit objects.
505This can be useful when applying patches received by email from
5063rd parties, when cherry-picking changes written by others across
507branches, or when amending someone else's commit to fix up a minor
508problem before submitting.
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100509
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100510By default this is granted to `Registered Users` in all projects,
511but a site administrator may disable it if verified authorship
512is required.
513
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100514
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100515[[category_forge_committer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800516=== Forge Committer
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100517
518Normally Gerrit requires the author and the committer identity
519lines in a Git commit object (or tagger line in an annotated tag) to
520match one of the registered email addresses of the uploading user.
521This permission allows users to bypass parts of that validation, which
522may be necessary when mirroring changes from an upstream project.
523
524Allows the use of an unverified committer line in commit objects, or an
525unverified tagger line in annotated tag objects. Typically this is only
526required when mirroring commits from an upstream project repository.
527
528
529[[category_forge_server]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800530=== Forge Server
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100531
532Normally Gerrit requires the author and the committer identity
533lines in a Git commit object (or tagger line in an annotated tag) to
534match one of the registered email addresses of the uploading user.
535This permission allows users to bypass parts of that validation, which
536may be necessary when mirroring changes from an upstream project.
537
538Allows the use of the server's own name and email on the committer
539line of a new commit object. This should only be necessary when force
540pushing a commit history which has been rewritten by 'git filter-branch'
541and that contains merge commits previously created by this Gerrit Code
542Review server.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100543
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100544
545[[category_owner]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800546=== Owner
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100547
548The `Owner` category controls which groups can modify the project's
549configuration. Users who are members of an owner group can:
550
551* Change the project description
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100552* Grant/revoke any access rights, including `Owner`
553
Mani Chandel7ec4ac72013-12-10 14:50:33 +0530554To get SSH branch access project owners must grant an access right to a group
555they are a member of, just like for any other user.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100556
557Ownership over a particular branch subspace may be delegated by
558entering a branch pattern. To delegate control over all branches
559that begin with `qa/` to the QA group, add `Owner` category
Jonathan Nieder5758f182015-03-30 11:28:55 -0700560for reference `+refs/heads/qa/*+`. Members of the QA group can
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100561further refine access, but only for references that begin with
Fredrik Luthander8fa3d262011-11-07 17:04:01 +0100562`refs/heads/qa/`. See <<project_owners,project owners>> to find
563out more about this role.
564
Edwin Kempin362fc852016-12-05 17:32:04 +0100565For the `All-Projects` root project any `Owner` access right on
566'refs/*' is ignored since this permission would allow users to edit the
567global capabilities, which is the same as being able to administrate
568the Gerrit server (e.g. the user could assign the `Administrate Server`
569capability to the own account).
570
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100571
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100572[[category_push]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800573=== Push
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100574
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100575This category controls how users are allowed to upload new commits
576to projects in Gerrit. It can either give permission to push
577directly into a branch, bypassing any code review process
578that would otherwise be used. Or it may give permission to upload
579new changes for code review, this depends on which namespace the
580permission is granted to.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100581
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100582[[category_push_direct]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800583==== Direct Push
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100584
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100585Any existing branch can be fast-forwarded to a new commit.
Robin Rosenberg524a3032012-10-14 14:24:36 +0200586Creation of new branches is controlled by the
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100587link:access-control.html#category_create['Create Reference']
588category. Deletion of existing branches is rejected. This is the
589safest mode as commits cannot be discarded.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100590
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100591* Force option
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100592+
Gert van Dijk8c5e33c2017-10-19 22:38:06 +0200593Implies <<category_delete,Delete Reference>>. Since a force push is
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100594effectively a delete immediately followed by a create, but performed
595atomically on the server and logged, this option also permits forced
596push updates to branches. Enabling this option allows existing commits
597to be discarded from a project history.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100598
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100599The push category is primarily useful for projects that only want to
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100600take advantage of Gerrit's access control features and do not need
601its code review functionality. Projects that need to require code
602reviews should not grant this category.
603
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100604
Dave Borowitzaa912272018-04-24 12:48:09 -0400605[[category_push_review]]
606==== Upload To Code Review
607
608The `Push` access right granted on the namespace
609`refs/for/refs/heads/BRANCH` permits the user to upload a non-merge
610commit to the project's `refs/for/BRANCH` namespace, creating a new
611change for code review.
612
613A user must be able to clone or fetch the project in order to create
614a new commit on their local system, so in practice they must also
615have the `Read` access granted to upload a change.
616
617For an open source, public Gerrit installation, it is common to grant
618`Push` for `+refs/for/refs/heads/*+` to `Registered Users` in the
619`All-Projects` ACL. For more private installations, its common to
620grant `Push` for `+refs/for/refs/heads/*+` to all users of a project.
621
622* Force option
623+
624The force option has no function when granted to a branch in the
625`+refs/for/refs/heads/*+` namespace.
626
627
David Pursehouse596f3642016-08-31 10:25:19 +0900628[[category_add_patch_set]]
629=== Add Patch Set
630
631This category controls which users are allowed to upload new patch sets to
632existing changes. Irrespective of this permission, change owners are always
Dave Borowitz942a8fe2018-04-24 11:56:17 -0400633allowed to upload new patch sets for their changes. This permission needs to be
634set on `refs/for/*`.
David Pursehouse596f3642016-08-31 10:25:19 +0900635
Dave Borowitz942a8fe2018-04-24 11:56:17 -0400636By default, this permission is granted to `Registered Users` on `refs/for/*`,
Aaron Gablebf7f41a2016-09-20 15:25:00 -0700637allowing all registered users to upload a new patch set to any change. Revoking
638this permission (by granting it to no groups and setting the "Exclusive" flag)
639will prevent users from uploading a patch set to a change they do not own.
David Pursehouse596f3642016-08-31 10:25:19 +0900640
641
Fredrik Luthanderbf568572012-01-18 11:17:00 +0100642[[category_push_merge]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800643=== Push Merge Commits
Fredrik Luthanderbf568572012-01-18 11:17:00 +0100644
Magnus Bäck282c1022012-04-18 15:39:17 -0400645The `Push Merge Commit` access right permits the user to upload merge
Gustaf Lundha28a1d22013-05-08 15:05:12 +0100646commits. It's an add-on to the <<category_push,Push>> access right, and
Magnus Bäck282c1022012-04-18 15:39:17 -0400647so it won't be sufficient with only `Push Merge Commit` granted for a
648push to happen. Some projects wish to restrict merges to being created
649by Gerrit. By granting `Push` without `Push Merge Commit`, the only
Edwin Kempinaef5d6e2012-01-24 09:04:54 +0100650merges that enter the system will be those created by Gerrit.
Fredrik Luthanderbf568572012-01-18 11:17:00 +0100651
Dave Borowitz942a8fe2018-04-24 11:56:17 -0400652The reference name connected to a `Push Merge Commit` entry must always
653be prefixed with `refs/for/`, for example `refs/for/refs/heads/BRANCH`.
654This applies even for an entry that complements a `Push` entry for
655`refs/heads/BRANCH` that allows direct pushes of non-merge commits, and
656the intention of the `Push Merge Commit` entry is to allow direct pushes
657of merge commits.
658
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200659
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100660[[category_push_annotated]]
Edwin Kempin62c15682016-09-05 14:32:38 +0200661[[category_create_annotated]]
662=== Create Annotated Tag
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100663
David Pursehouse690cebe2012-12-12 19:22:45 +0900664This category permits users to push an annotated tag object into the
665project's repository. Typically this would be done with a command line
666such as:
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100667
Michael Ochmannb99feab2016-07-06 14:10:22 +0200668----
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100669 git push ssh://USER@HOST:PORT/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200670----
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100671
David Pursehouse690cebe2012-12-12 19:22:45 +0900672Or:
673
Michael Ochmannb99feab2016-07-06 14:10:22 +0200674----
David Pursehouse690cebe2012-12-12 19:22:45 +0900675 git push https://HOST/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200676----
David Pursehouse690cebe2012-12-12 19:22:45 +0900677
David Pursehouseb429ce12012-12-12 11:04:40 +0900678Tags must be annotated (created with `git tag -a`), should exist in
679the `refs/tags/` namespace, and should be new.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100680
681This category is intended to be used to publish tags when a project
682reaches a stable release point worth remembering in history.
683
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100684It allows for a new annotated (unsigned) tag to be created. The
685tagger email address must be verified for the current user.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100686
687To push tags created by users other than the current user (such
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100688as tags mirrored from an upstream project), `Forge Committer Identity`
Edwin Kempin62c15682016-09-05 14:32:38 +0200689must be also granted in addition to `Create Annotated Tag`.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100690
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100691To push lightweight (non annotated) tags, grant
692<<category_create,`Create Reference`>> for reference name
Jonathan Nieder5758f182015-03-30 11:28:55 -0700693`+refs/tags/*+`, as lightweight tags are implemented just like
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100694branches in Git.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100695
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100696To delete or overwrite an existing tag, grant `Push` with the force
Jonathan Nieder5758f182015-03-30 11:28:55 -0700697option enabled for reference name `+refs/tags/*+`, as deleting a tag
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100698requires the same permission as deleting a branch.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100699
Edwin Kempin94db6b62016-09-02 14:37:17 +0200700To push an annotated tag on a new commit (commit not reachable from any
701branch/tag) grant `Push` permission on `+refs/tags/*+` too.
Edwin Kempin439dd1f2016-09-05 16:25:12 +0200702The `Push` permission on `+refs/tags/*+` does *not* allow updating of annotated
Edwin Kempin0a41b9c2016-09-05 16:38:51 +0200703tags, not even fast-forwarding of annotated tags. Update of annotated tags
704is only allowed by granting `Push` with `force` option on `+refs/tags/*+`.
Edwin Kempin94db6b62016-09-02 14:37:17 +0200705
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100706
David Pursehouseb429ce12012-12-12 11:04:40 +0900707[[category_push_signed]]
Edwin Kempin62c15682016-09-05 14:32:38 +0200708[[category_create_signed]]
709=== Create Signed Tag
David Pursehouseb429ce12012-12-12 11:04:40 +0900710
David Pursehouse690cebe2012-12-12 19:22:45 +0900711This category permits users to push a PGP signed tag object into the
712project's repository. Typically this would be done with a command
713line such as:
David Pursehouseb429ce12012-12-12 11:04:40 +0900714
Michael Ochmannb99feab2016-07-06 14:10:22 +0200715----
David Pursehouseb429ce12012-12-12 11:04:40 +0900716 git push ssh://USER@HOST:PORT/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200717----
David Pursehouseb429ce12012-12-12 11:04:40 +0900718
David Pursehouse690cebe2012-12-12 19:22:45 +0900719Or:
720
Michael Ochmannb99feab2016-07-06 14:10:22 +0200721----
David Pursehouse690cebe2012-12-12 19:22:45 +0900722 git push https://HOST/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200723----
David Pursehouse690cebe2012-12-12 19:22:45 +0900724
David Pursehouseb429ce12012-12-12 11:04:40 +0900725Tags must be signed (created with `git tag -s`), should exist in the
726`refs/tags/` namespace, and should be new.
727
728
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100729[[category_read]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800730=== Read
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100731
732The `Read` category controls visibility to the project's
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100733changes, comments, code diffs, and Git access over SSH or HTTP.
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100734A user must have this access granted in order to see a project, its
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100735changes, or any of its data.
736
Nasser Grainawi990284e2019-05-24 11:12:47 -0600737[[read_special_behaviors]]
738==== Special behaviors
739
740This category has multiple special behaviors:
741
742The per-project ACL is evaluated before the global all projects ACL.
743If the per-project ACL has granted `Read` with 'DENY', and does not
744otherwise grant `Read` with 'ALLOW', then a `Read` in the all projects
745ACL is ignored. This behavior is useful to hide a handful of projects
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100746on an otherwise public server.
747
Nasser Grainawi990284e2019-05-24 11:12:47 -0600748You cannot grant `Read` on the `refs/tags/` namespace. Visibility to
749`refs/tags/` is derived from `Read` grants on refs namespaces other than
750`refs/tags/`, `refs/changes/`, and `refs/cache-automerge/` by finding
751tags reachable from those refs. For example, if a tag `refs/tags/test`
752points to a commit on the branch `refs/heads/master`, then allowing
753`Read` access to `refs/heads/master` would also allow access to
754`refs/tags/test`. If a tag is reachable from multiple refs, allowing
755access to any of those refs allows access to the tag.
756
757[[read_typical_usage]]
758==== Typical usage
759
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100760For an open source, public Gerrit installation it is common to grant
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100761`Read` to `Anonymous Users` in the `All-Projects` ACL, enabling
762casual browsing of any project's changes, as well as fetching any
763project's repository over SSH or HTTP. New projects can be
764temporarily hidden from public view by granting `Read` with 'DENY'
765to `Anonymous Users` and granting `Read` to the project owner's
766group within the per-project ACL.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100767
768For a private Gerrit installation using a trusted HTTP authentication
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100769source, granting `Read` to `Registered Users` may be more
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100770typical, enabling read access only to those users who have been
771able to authenticate through the HTTP access controls. This may
772be suitable in a corporate deployment if the HTTP access control
773is already restricted to the correct set of users.
774
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100775
Edwin Kempinfd330fc2012-05-09 21:09:55 +0200776[[category_rebase]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800777=== Rebase
Edwin Kempinfd330fc2012-05-09 21:09:55 +0200778
779This category permits users to rebase changes via the web UI by pushing
780the `Rebase Change` button.
781
782The change owner and submitters can always rebase changes in the web UI
783(even without having the `Rebase` access right assigned).
784
785Users without this access right who are able to upload new patch sets
786can still do the rebase locally and upload the rebased commit as a new
787patch set.
788
Gal Paikin6c9ed952020-01-22 10:36:35 +0100789[[category_revert]]
790=== Revert
791
792This category permits users to revert changes via the web UI by pushing
793the `Revert Change` button.
794
795Users without this access right who are able to upload changes can
796still do the revert locally and upload the revert commit as a new change.
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200797
Chad Horohoec626f3c2012-09-13 11:04:20 -0700798[[category_remove_reviewer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800799=== Remove Reviewer
Chad Horohoec626f3c2012-09-13 11:04:20 -0700800
801This category permits users to remove other users from the list of
802reviewers on a change.
803
David Pursehouseb3d13832014-12-04 14:50:37 +0900804Change owners can always remove reviewers who have given a zero or positive
805score (even without having the `Remove Reviewer` access right assigned).
806
807Project owners and site administrators can always remove any reviewer (even
808without having the `Remove Reviewer` access right assigned).
Chad Horohoec626f3c2012-09-13 11:04:20 -0700809
810Users without this access right can only remove themselves from the
811reviewer list on a change.
812
Edwin Kempinfd330fc2012-05-09 21:09:55 +0200813
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200814[[category_review_labels]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800815=== Review Labels
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200816
817For every configured label `My-Name` in the project, there is a
818corresponding permission `label-My-Name` with a range corresponding to
Shawn Pearce9d783122013-06-11 18:18:03 -0700819the defined values. There is also a corresponding `labelAs-My-Name`
820permission that enables editing another user's label.
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200821
822Gerrit comes pre-configured with a default 'Code-Review' label that can
823be granted to groups within projects, enabling functionality for that
824group's members. link:config-labels.html[Custom labels] may also be
825defined globally or on a per-project basis.
826
827
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100828[[category_submit]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800829=== Submit
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800830
David Pursehouse6bf46ed2015-02-04 20:31:23 +0900831This category permits users to submit changes.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800832
833Submitting a change causes it to be merged into the destination
834branch as soon as possible, making it a permanent part of the
David Pursehouse22bd6f92014-02-20 21:11:01 +0900835project's history.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800836
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800837In order to submit, all labels (such as `Verified` and `Code-Review`,
838above) must enable submit, and also must not block it. See above for
839details on each label.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800840
Edwin Kempinbfa06212013-04-04 16:06:39 +0200841To link:user-upload.html#auto_merge[immediately submit a change on push]
Dave Borowitz942a8fe2018-04-24 11:56:17 -0400842the caller needs to have the Submit permission on `refs/for/<ref>`
843(e.g. on `refs/for/refs/heads/master`).
Edwin Kempinbfa06212013-04-04 16:06:39 +0200844
Edwin Kempin1493bd62016-12-02 10:12:17 +0100845Submitting to the `refs/meta/config` branch is only allowed to project
846owners. Any explicit submit permissions for non-project-owners on this
847branch are ignored. By submitting to the `refs/meta/config` branch the
848configuration of the project is changed, which can include changes to
849the access rights of the project. Allowing this to be done by a
850non-project-owner would open a security hole enabling editing of access
851rights, and thus granting of powers beyond submitting to the
852configuration.
853
David Pursehouse22bd6f92014-02-20 21:11:01 +0900854[[category_submit_on_behalf_of]]
855=== Submit (On Behalf Of)
856
857This category permits users who have also been granted the `Submit`
Dave Borowitzc6d143d2016-02-24 12:32:23 -0500858permission to submit changes on behalf of another user, by using the
859`on_behalf_of` field in link:rest-api-changes.html#submit-input[SubmitInput]
860when link:rest-api-changes.html#submit-change[submitting using the REST API].
David Pursehouse22bd6f92014-02-20 21:11:01 +0900861
862Note that this permission is named `submitAs` in the `project.config`
863file.
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100864
Edwin Kempin98ddc8a2017-02-21 11:56:08 +0100865[[category_view_private_changes]]
866=== View Private Changes
867
Edwin Kempin311be602018-12-28 14:03:50 +0100868This category permits users to view all private changes and all change edit refs.
Edwin Kempin98ddc8a2017-02-21 11:56:08 +0100869
870The change owner and any explicitly added reviewers can always see
871private changes (even without having the `View Private Changes` access
872right assigned).
873
Edwin Kempin3e856b22020-11-04 14:45:21 +0100874**NOTE**: If link:config-gerrit.html#auth.skipFullRefEvaluationIfAllRefsAreVisible[
875auth.skipFullRefEvaluationIfAllRefsAreVisible] is `true` (which is the case by
876default) privates changes and all change edit refs are also visible to users
877that have read access on `refs/*`.
878
David Ostrovskyc3f6b142020-07-03 11:53:04 +0000879[[category_toggle_work_in_progress_state]]
880=== Toggle Work In Progress state
881
882This category controls who is able to flip the Work In Progress bit.
883
884Change owner, server administrators and project owners can always flip
885the Work In Progress bit of the change (even without having the
886`Toggle Work In Progress state` access right assigned).
David Pursehousebe7f4582012-12-12 11:21:29 +0900887
Paladox none580ae0e2017-02-12 18:15:48 +0000888[[category_delete_own_changes]]
889=== Delete Own Changes
890
891This category permits users to delete their own changes if they are not merged
892yet. This means only own changes that are open or abandoned can be deleted.
893
David Pursehouse42488f82018-07-05 13:24:47 +0900894[[category_delete_changes]]
895=== Delete Changes
896
897This category permits users to delete other users' changes if they are not merged
898yet. This means only changes that are open or abandoned can be deleted.
899
900Having this permission implies having the link:#category_delete_own_changes[
901Delete Own Changes] permission.
902
903Administrators may always delete changes without having this permission.
904
David Pursehouse59aee362012-11-15 17:25:17 +0900905[[category_edit_topic_name]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800906=== Edit Topic Name
David Pursehouse59aee362012-11-15 17:25:17 +0900907
908This category permits users to edit the topic name of a change that
909is uploaded for review.
910
911The change owner, branch owners, project owners, and site administrators
912can always edit the topic name (even without having the `Edit Topic Name`
913access right assigned).
914
Edwin Kempin1f77b532013-11-08 07:16:31 +0100915Whether the topic can be edited on closed changes can be controlled
916by the 'Force Edit' flag. If this flag is not set the topic can only be
917edited on open changes.
918
David Pursehouse59aee362012-11-15 17:25:17 +0900919
David Pursehousede711702014-09-10 16:23:34 +0200920[[category_edit_hashtags]]
921=== Edit Hashtags
922
Dave Borowitzdaf0f0f2018-03-15 10:37:54 -0400923This category permits users to add or remove
924link:intro-user.html#hashtags[hashtags] on a change that is uploaded for review.
David Pursehousede711702014-09-10 16:23:34 +0200925
926The change owner, branch owners, project owners, and site administrators
927can always edit or remove hashtags (even without having the `Edit Hashtags`
928access right assigned).
929
Sven Selberga3ca6042016-09-13 16:16:54 +0200930[[category_edit_assigned_to]]
931=== Edit Assignee
932
933This category permits users to set who is assigned to a change that is
934uploaded for review.
935
936The change owner, ref owners, and the user currently assigned to a change
937can always change the assignee.
David Pursehousede711702014-09-10 16:23:34 +0200938
Edwin Kempin4bf01962014-04-16 16:47:10 +0200939[[example_roles]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800940== Examples of typical roles in a project
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100941
942Below follows a set of typical roles on a server and which access
943rights these roles typically should be granted. You may see them as
David Pursehouse221d4f62012-06-08 17:38:08 +0900944general guidelines for a typical way to set up your project on a
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100945brand new Gerrit instance.
946
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200947
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100948[[examples_contributor]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800949=== Contributor
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100950
951This is the typical user on a public server. They are able to read
952your project and upload new changes to it. They are able to give
953feedback on other changes as well, but are unable to block or approve
954any changes.
955
956Suggested access rights to grant:
957
Nasser Grainawi990284e2019-05-24 11:12:47 -0600958* xref:category_read[`Read`] on 'refs/heads/\*'
Dave Borowitzaa912272018-04-24 12:48:09 -0400959* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800960* link:config-labels.html#label_Code-Review[`Code-Review`] with range '-1' to '+1' for 'refs/heads/*'
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100961
Fredrik Luthanderd6c59252014-03-17 00:56:04 +0100962If it's desired to have the possibility to upload temporarily hidden
963changes there's a specific permission for that. This enables someone
964to add specific reviewers for early feedback before making the change
David Ostrovsky6ffb7d92017-02-13 21:16:58 +0100965publicly visible.
Fredrik Luthanderd6c59252014-03-17 00:56:04 +0100966
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100967
Fredrik Luthander654161c2012-01-31 14:42:36 +0100968[[examples_developer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800969=== Developer
Fredrik Luthander654161c2012-01-31 14:42:36 +0100970
971This is the typical core developer on a public server. They are able
972to read the project, upload changes to a branch. They are allowed to
973push merge commits to merge branches together. Also, they are allowed
974to forge author identity, thus handling commits belonging to others
975than themselves, effectively allowing them to transfer commits
976between different branches.
977
978They are furthermore able to code review and verify commits, and
979eventually submit them. If you have an automated CI system that
980builds all uploaded patch sets you might want to skip the
981verification rights for the developer and let the CI system do that
982exclusively.
983
984Suggested access rights to grant:
985
Nasser Grainawi990284e2019-05-24 11:12:47 -0600986* xref:category_read[`Read`] on 'refs/heads/\*'
Dave Borowitzaa912272018-04-24 12:48:09 -0400987* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
Dave Borowitz942a8fe2018-04-24 11:56:17 -0400988* xref:category_push_merge[`Push merge commit`] to 'refs/for/refs/heads/*'
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800989* xref:category_forge_author[`Forge Author Identity`] to 'refs/heads/*'
990* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-2' to '+2' for 'refs/heads/*'
Peter Jönsson3bfcae72013-07-17 22:06:32 +0200991* link:config-labels.html#label_Verified[`Label: Verified`] with range '-1' to '+1' for 'refs/heads/*'
Edwin Kempin7b1897c2015-04-16 15:13:44 +0200992* xref:category_submit[`Submit`] on 'refs/heads/*'
Fredrik Luthander654161c2012-01-31 14:42:36 +0100993
994If the project is small or the developers are seasoned it might make
995sense to give them the freedom to push commits directly to a branch.
996
997Optional access rights to grant:
998
999* <<category_push,`Push`>> to 'refs/heads/*'
1000* <<category_push_merge,`Push merge commit`>> to 'refs/heads/*'
1001
1002
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001003[[examples_cisystem]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001004=== CI system
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001005
Gustaf Lundha28a1d22013-05-08 15:05:12 +01001006A typical Continuous Integration system should be able to download new changes
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001007to build and then leave a verdict somehow.
1008
1009As an example, the popular
Marian Harbach34253372019-12-10 18:01:31 +01001010link:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger[gerrit-trigger plugin,role=external,window=_blank]
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001011for Jenkins/Hudson can set labels at:
1012
1013* The start of a build
1014* A successful build
1015* An unstable build (tests fails)
1016* A failed build
1017
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001018Usually the range chosen for this verdict is the `Verified` label. Depending on
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001019the size of your project and discipline of involved developers you might want
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001020to limit access right to the +1 `Verified` label to the CI system only. That
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001021way it's guaranteed that submitted commits always get built and pass tests
1022successfully.
1023
1024If the build doesn't complete successfully the CI system can set the
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001025`Verified` label to -1. However that means that a failed build will block
1026submit of the change even if someone else sets `Verified` +1. Depending on the
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001027project and how much the CI system can be trusted for accurate results, a
1028blocking label might not be feasible. A recommended alternative is to set the
1029label `Code-review` to -1 instead, as it isn't a blocking label but still
David Pursehouse221d4f62012-06-08 17:38:08 +09001030shows a red label in the Gerrit UI. Optionally, to enable the possibility to
1031deliver different results (build error vs unstable for instance), it's also
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001032possible to set `Code-review` +1 as well.
1033
Edwin Kempina2e13cf2012-03-30 09:02:36 +02001034If pushing new changes is granted, it's possible to automate cherry-pick of
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001035submitted changes for upload to other branches under certain conditions. This
1036is probably not the first step of what a project wants to automate however,
1037and so the push right can be found under the optional section.
1038
1039Suggested access rights to grant, that won't block changes:
1040
Nasser Grainawi990284e2019-05-24 11:12:47 -06001041* xref:category_read[`Read`] on 'refs/heads/\*'
Dave Borowitz01c1b1f2013-02-27 13:49:04 -08001042* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-1' to '0' for 'refs/heads/*'
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001043* link:config-labels.html#label_Verified[`Label: Verified`] with range '0' to '+1' for 'refs/heads/*'
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001044
1045Optional access rights to grant:
1046
Dave Borowitz01c1b1f2013-02-27 13:49:04 -08001047* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-1' to '+1' for 'refs/heads/*'
Dave Borowitzaa912272018-04-24 12:48:09 -04001048* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
1049
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001050
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001051[[examples_integrator]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001052=== Integrator
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001053
1054Integrators are like developers but with some additional rights granted due
1055to their administrative role in a project. They can upload or push any commit
1056with any committer email (not just their own) and they can also create new
1057tags and branches.
1058
1059Suggested access rights to grant:
1060
1061* <<examples_developer,Developer rights>>
1062* <<category_push,`Push`>> to 'refs/heads/*'
1063* <<category_push_merge,`Push merge commit`>> to 'refs/heads/*'
Fredrik Luthander404a2852012-10-10 08:51:22 +02001064* <<category_forge_committer,`Forge Committer Identity`>> to 'refs/for/refs/heads/*'
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001065* <<category_create,`Create Reference`>> to 'refs/heads/*'
Edwin Kempin62c15682016-09-05 14:32:38 +02001066* <<category_create_annotated,`Create Annotated Tag`>> to 'refs/tags/*'
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001067
1068
Fredrik Luthander9c645362012-03-22 18:10:42 +01001069[[examples_project-owner]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001070=== Project owner
Fredrik Luthander9c645362012-03-22 18:10:42 +01001071
1072The project owner is almost like an integrator but with additional destructive
1073power in the form of being able to delete branches. Optionally these users
1074also have the power to configure access rights in gits assigned to them.
1075
1076[WARNING]
Gustaf Lundha28a1d22013-05-08 15:05:12 +01001077These users should be really knowledgeable about git, for instance knowing why
Fredrik Luthander9c645362012-03-22 18:10:42 +01001078tags never should be removed from a server. This role is granted potentially
1079destructive access rights and cleaning up after such a mishap could be time
1080consuming!
1081
1082Suggested access rights to grant:
1083
1084* <<examples_integrator,Integrator rights>>
1085* <<category_push,`Push`>> with the force option to 'refs/heads/\*' and 'refs/tags/*'
1086
1087Optional access right to grant:
1088
1089* <<category_owner,`Owner`>> in the gits they mostly work with.
1090
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001091
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001092[[examples_administrator]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001093=== Administrator
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001094
1095The administrator role is the most powerful role known in the Gerrit universe.
Fredrik Luthanderb8eaa082014-03-17 01:02:22 +01001096This role may grant itself (or others) any access right. By default the
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001097<<administrators,`Administrators` group>> is the group that has this role.
1098
1099Mandatory access rights:
1100
1101* <<capability_administrateServer,The `Administrate Server` capability>>
1102
1103Suggested access rights to grant:
1104
Fredrik Luthanderb8eaa082014-03-17 01:02:22 +01001105* <<examples_project-owner,`Project owner rights`>>
1106* Any <<global_capabilities,`capabilities`>> needed by the administrator
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001107
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001108
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001109== Enforcing site wide access policies
Sasa Zivkovd589f462013-02-12 14:27:09 +01001110
Jonathan Nieder5758f182015-03-30 11:28:55 -07001111By granting the <<category_owner,`Owner`>> access right on the `+refs/*+` to a
Sasa Zivkovd589f462013-02-12 14:27:09 +01001112group, Gerrit administrators can delegate the responsibility of maintaining
1113access rights for that project to that group.
1114
1115In a corporate deployment it is often necessary to enforce some access
1116policies. An example could be that no-one can update or delete a tag, not even
1117the project owners. The 'ALLOW' and 'DENY' rules are not enough for this
1118purpose as project owners can grant themselves any access right they wish and,
1119thus, effectively override any inherited access rights from the
1120"`All-Projects`" or some other common parent project.
1121
1122What is needed is a mechanism to block a permission in a parent project so
1123that even project owners cannot allow a blocked permission in their child
1124project. Still, project owners should retain the possibility to manage all
1125non-blocked rules as they wish. This gives best of both worlds:
1126
1127* Gerrit administrators can concentrate on enforcing site wide policies
1128 and providing a meaningful set of default access permissions
1129* Project owners can manage access rights of their projects without a danger
1130 of violating a site wide policy
1131
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001132
Edwin Kempin60ab8532013-03-27 14:33:46 +01001133[[block]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001134=== 'BLOCK' access rule
Sasa Zivkovd589f462013-02-12 14:27:09 +01001135
Tyler Ciprianiefd09b62019-03-27 21:36:09 -06001136The 'BLOCK' rule can be used to take away rights from users. The BLOCK rule
1137works across project inheritance, from the top down, so an administrator can
1138use 'BLOCK' rules to enforce site-wide restrictions.
1139
1140For example, if a user in the 'Foo Users' group tries to push to
1141'refs/heads/mater' with the permissions below, that user will be blocked
1142
1143[options="header"]
1144|=========================================================================
1145|Project | Inherits From |Reference Name |Permissions |
1146|All-Projects | - |refs/* |push = block Foo Users |
1147|Foo | All-Projects |refs/heads/* |push = Foo Users |
1148|=========================================================================
1149
1150'BLOCK' rules are evaluated starting from the parent project, and after a 'BLOCK'
1151rule is found to apply, further rules are ignored. Hence, in this example, the
1152permissions on child-project is ignored.
1153
1154----
1155All-Projects: project.config
1156 [access "refs/heads/*"]
1157 push = block group X
1158
1159child-project: project.config
1160 [access "refs/heads/*"]
1161 exclusiveGroupPermissions = push
1162 push = group X
1163----
1164
1165In this case push for group 'X' will be blocked, even though the Exclusive
1166flag was set for the child-project.
Sasa Zivkovd589f462013-02-12 14:27:09 +01001167
1168A 'BLOCK' rule that blocks the 'push' permission blocks any type of push,
1169force or not. A blocking force push rule blocks only force pushes, but
1170allows non-forced pushes if an 'ALLOW' rule would have permitted it.
1171
Tyler Ciprianiefd09b62019-03-27 21:36:09 -06001172It is also possible to block label ranges. To block a group 'X' from voting
Sasa Zivkovd589f462013-02-12 14:27:09 +01001173'-2' and '+2', but keep their existing voting permissions for the '-1..+1'
1174range intact we would define:
1175
Michael Ochmannb99feab2016-07-06 14:10:22 +02001176----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001177 [access "refs/heads/*"]
1178 label-Code-Review = block -2..+2 group X
Michael Ochmannb99feab2016-07-06 14:10:22 +02001179----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001180
1181The interpretation of the 'min..max' range in case of a blocking rule is: block
1182every vote from '-INFINITE..min' and 'max..INFINITE'. For the example above it
1183means that the range '-1..+1' is not affected by this block.
1184
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001185=== 'BLOCK' and 'ALLOW' rules in the same access section
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001186
1187When an access section of a project contains a 'BLOCK' and an 'ALLOW' rule for
1188the same permission then this 'ALLOW' rule overrides the 'BLOCK' rule:
1189
Michael Ochmannb99feab2016-07-06 14:10:22 +02001190----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001191 [access "refs/heads/*"]
1192 push = block group X
1193 push = group Y
Michael Ochmannb99feab2016-07-06 14:10:22 +02001194----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001195
1196In this case a user which is a member of the group 'Y' will still be allowed to
1197push to 'refs/heads/*' even if it is a member of the group 'X'.
1198
Tyler Ciprianiefd09b62019-03-27 21:36:09 -06001199=== 'BLOCK' and 'ALLOW' rules in the same project with the Exclusive flag
1200
1201When a project contains a 'BLOCK' and 'ALLOW' that uses the Exclusive flag in a
1202more specific reference, the 'ALLOW' rule with the Exclusive flag will override
1203the 'BLOCK' rule:
1204
1205----
1206 [access "refs/*"]
1207 read = block group X
1208
1209 [access "refs/heads/*"]
1210 exclusiveGroupPermissions = read
1211 read = group X
1212----
1213
1214In this case a user which is a member of the group 'X' will still be allowed to
1215read 'refs/heads/*'.
1216
Michael Ochmann8129ece2016-07-08 11:25:25 +02001217[NOTE]
1218An 'ALLOW' rule overrides a 'BLOCK' rule only when both of them are
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001219inside the same access section of the same project. An 'ALLOW' rule in a
1220different access section of the same project or in any access section in an
1221inheriting project cannot override a 'BLOCK' rule.
1222
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001223
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001224=== Examples
Sasa Zivkovd589f462013-02-12 14:27:09 +01001225
1226The following examples show some possible use cases for the 'BLOCK' rules.
1227
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001228==== Make sure no one can update or delete a tag
Sasa Zivkovd589f462013-02-12 14:27:09 +01001229
1230This requirement is quite common in a corporate deployment where
1231reproducibility of a build must be guaranteed. To achieve that we block 'push'
1232permission for the <<anonymous_users,'Anonymous Users'>> in "`All-Projects`":
1233
Michael Ochmannb99feab2016-07-06 14:10:22 +02001234----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001235 [access "refs/tags/*"]
1236 push = block group Anonymous Users
Michael Ochmannb99feab2016-07-06 14:10:22 +02001237----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001238
1239By blocking the <<anonymous_users,'Anonymous Users'>> we effectively block
1240everyone as everyone is a member of that group. Note that the permission to
1241create a tag is still necessary. Assuming that only <<category_owner,project
1242owners>> are allowed to create tags, we would extend the example above:
1243
Michael Ochmannb99feab2016-07-06 14:10:22 +02001244----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001245 [access "refs/tags/*"]
1246 push = block group Anonymous Users
1247 create = group Project Owners
1248 pushTag = group Project Owners
Michael Ochmannb99feab2016-07-06 14:10:22 +02001249----
Fredrik Luthander9c645362012-03-22 18:10:42 +01001250
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001251
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001252==== Let only a dedicated group vote in a special category
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001253
1254Assume there is a more restrictive process for submitting changes in stable
1255release branches which is manifested as a new voting category
1256'Release-Process'. Assume we want to make sure that only a 'Release Engineers'
1257group can vote in this category and that even project owners cannot approve
1258this category. We have to block everyone except the 'Release Engineers' to vote
1259in this category and, of course, allow 'Release Engineers' to vote in that
1260category. In the "`All-Projects`" we define the following rules:
1261
Michael Ochmannb99feab2016-07-06 14:10:22 +02001262----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001263 [access "refs/heads/stable*"]
Gustaf Lundha28a1d22013-05-08 15:05:12 +01001264 label-Release-Process = block -1..+1 group Anonymous Users
1265 label-Release-Process = -1..+1 group Release Engineers
Michael Ochmannb99feab2016-07-06 14:10:22 +02001266----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001267
David Pursehouse8becc2a2013-04-23 18:51:04 +09001268[[global_capabilities]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001269== Global Capabilities
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001270
David Pursehouse8becc2a2013-04-23 18:51:04 +09001271The global capabilities control actions that the administrators of
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001272the server can perform which usually affect the entire
1273server in some way. The administrators may delegate these
1274capabilities to trusted groups of users.
1275
1276Delegation of capabilities allows groups to be granted a subset of
1277administrative capabilities without being given complete
1278administrative control of the server. This makes it possible to
1279keep fewer users in the administrators group, even while spreading
1280much of the server administration burden out to more users.
1281
David Pursehouse8becc2a2013-04-23 18:51:04 +09001282Global capabilities are assigned to groups in the access rights settings
1283of the root project ("`All-Projects`").
1284
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001285Below you find a list of capabilities available:
1286
1287
David Pursehouse11c4c5f2013-06-09 08:07:23 +09001288[[capability_accessDatabase]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001289=== Access Database
David Pursehouse11c4c5f2013-06-09 08:07:23 +09001290
Edwin Kempin0f595f62018-12-10 11:48:42 +01001291Allow users to view code review metadata refs in repositories.
David Pursehouse11c4c5f2013-06-09 08:07:23 +09001292
1293
Fredrik Luthander426885f2012-02-13 09:56:57 +01001294[[capability_administrateServer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001295=== Administrate Server
Fredrik Luthander426885f2012-02-13 09:56:57 +01001296
1297This is in effect the owner and administrator role of the Gerrit
Edwin Kempin17287422016-04-07 08:44:39 +02001298instance. Any members of a group granted this capability will be
Fredrik Luthander426885f2012-02-13 09:56:57 +01001299able to grant any access right to any group. They will also have all
1300capabilities granted to them automatically.
1301
Edwin Kempin17287422016-04-07 08:44:39 +02001302In most installations only those users who have direct filesystem and
1303database access should be granted this capability.
1304
1305This capability does not imply any other access rights. Users that have
1306this capability do not automatically get code review approval or submit
1307rights in projects. This is a feature designed to permit administrative
1308users to otherwise access Gerrit as any other normal user would,
1309without needing two different accounts.
1310
Fredrik Luthander426885f2012-02-13 09:56:57 +01001311
Bruce Zu4512fe62014-11-18 17:39:41 +08001312[[capability_batchChangesLimit]]
1313=== Batch Changes Limit
1314
1315Allow site administrators to configure the batch changes limit for
1316users to override the system config
1317link:config-gerrit.html#receive.maxBatchChanges['receive.maxBatchChanges'].
1318
1319Administrators can add a global block to `All-Projects` with group(s)
1320that should have different limits.
1321
1322When applying a batch changes limit to a user the largest value
1323granted by any of their groups is used. 0 means no limit.
1324
1325
Fredrik Luthanderb02afca2012-02-13 09:59:48 +01001326[[capability_createAccount]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001327=== Create Account
Fredrik Luthanderb02afca2012-02-13 09:59:48 +01001328
Fredrik Luthander79d38152012-03-13 09:52:22 +01001329Allow link:cmd-create-account.html[account creation over the ssh prompt].
Fredrik Luthanderb02afca2012-02-13 09:59:48 +01001330This capability allows the granted group members to create non-interactive
1331service accounts. These service accounts are generally used for automation
1332and made to be members of the
Patrick Hiesele587c402020-08-07 16:11:29 +02001333link:access-control.html#service_users['Service users'] group.
Fredrik Luthanderb02afca2012-02-13 09:59:48 +01001334
1335
Fredrik Luthander79d38152012-03-13 09:52:22 +01001336[[capability_createGroup]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001337=== Create Group
Fredrik Luthander79d38152012-03-13 09:52:22 +01001338
1339Allow group creation. Groups are used to grant users access to different
1340actions in projects. This capability allows the granted group members to
Gal Paikinb64e25b2020-04-06 13:44:12 +02001341either link:cmd-create-group.html[create new groups via ssh] or via the web UI
1342by navigating at the top of the page to BROWSE -> Groups, and then pushing the
1343"CREATE NEW" button.
Fredrik Luthander79d38152012-03-13 09:52:22 +01001344
1345
1346[[capability_createProject]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001347=== Create Project
Fredrik Luthander79d38152012-03-13 09:52:22 +01001348
1349Allow project creation. This capability allows the granted group to
1350either link:cmd-create-project.html[create new git projects via ssh]
1351or via the web UI.
1352
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001353
Sasa Zivkov812f4892012-06-21 16:25:21 +02001354[[capability_emailReviewers]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001355=== Email Reviewers
Sasa Zivkov812f4892012-06-21 16:25:21 +02001356
1357Allow or deny sending email to change reviewers and watchers. This can be used
1358to deny build bots from emailing reviewers and people who watch the change.
1359Instead, only the authors of the change and those who starred it will be
1360emailed. The allow rules are evaluated before deny rules, however the default
1361is to allow emailing, if no explicit rule is matched.
Fredrik Luthander79d38152012-03-13 09:52:22 +01001362
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001363
Fredrik Luthander74ad0d02012-03-13 13:06:30 +01001364[[capability_flushCaches]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001365=== Flush Caches
Fredrik Luthander74ad0d02012-03-13 13:06:30 +01001366
Fredrik Luthander48603002012-03-21 18:17:17 +01001367Allow the flushing of Gerrit's caches. This capability allows the granted
Fredrik Luthander74ad0d02012-03-13 13:06:30 +01001368group to link:cmd-flush-caches.html[flush some or all Gerrit caches via ssh].
1369
1370[NOTE]
1371This capability doesn't imply permissions to the show-caches command. For that
1372you need the <<capability_viewCaches,view caches capability>>.
1373
1374
Fredrik Luthander46843022012-03-13 16:11:02 +01001375[[capability_kill]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001376=== Kill Task
Fredrik Luthander46843022012-03-13 16:11:02 +01001377
1378Allow the operation of the link:cmd-kill.html[kill command over ssh]. The
1379kill command ends tasks that currently occupy the Gerrit server, usually
1380a replication task or a user initiated task such as an upload-pack or
Gustaf Lundha28a1d22013-05-08 15:05:12 +01001381receive-pack.
Fredrik Luthander46843022012-03-13 16:11:02 +01001382
Dave Borowitz664d0402015-06-11 15:35:48 -04001383[[capability_maintainServer]]
1384=== Maintain Server
1385
1386Allow basic, constrained server maintenance tasks, such as flushing caches and
1387reindexing changes. Does not grant arbitrary database access, read/write, or
1388ACL management permissions, as might the
1389<<capability_administrateServer,administrate server capability>>.
1390
1391Implies the following capabilities:
1392
1393* <<capability_flushCaches,Flush Caches>>
1394* <<capability_kill,Kill Task>>
1395* <<capability_runGC,Run Garbage Collection>>
1396* <<capability_viewCaches,View Caches>>
1397* <<capability_viewQueue,View Queue>>
1398
David Ostrovskyaa49e272014-07-22 00:55:47 +02001399[[capability_modifyAccount]]
1400=== Modify Account
1401
1402Allow to link:cmd-set-account.html[modify accounts over the ssh prompt].
1403This capability allows the granted group members to modify any user account
Edwin Kempined777162017-11-15 08:23:40 -08001404setting. In addition this capability is required to view secondary emails
1405of other accounts.
Fredrik Luthander46843022012-03-13 16:11:02 +01001406
1407[[capability_priority]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001408=== Priority
Fredrik Luthander46843022012-03-13 16:11:02 +01001409
1410This capability allows users to use
1411link:config-gerrit.html#sshd.batchThreads[the thread pool reserved] for
Patrick Hiesele587c402020-08-07 16:11:29 +02001412link:access-control.html#service_users['Service Users'].
Fredrik Luthander46843022012-03-13 16:11:02 +01001413It's a binary value in that granted users either have access to the thread
1414pool, or they don't.
1415
1416There are three modes for this capability and they're listed by rising
1417priority:
1418
1419No capability configured.::
1420The user isn't a member of a group with any priority capability granted. By
1421default the user is then in the 'INTERACTIVE' thread pool.
1422
1423'BATCH'::
Patrick Hiesele587c402020-08-07 16:11:29 +02001424If there's a thread pool configured for 'Service Users' and a user is
Fredrik Luthander46843022012-03-13 16:11:02 +01001425granted the priority capability with the 'BATCH' mode selected, the user ends
1426up in the separate batch user thread pool. This is true unless the user is
1427also granted the below 'INTERACTIVE' option.
1428
1429'INTERACTIVE'::
1430If a user is granted the priority capability with the 'INTERACTIVE' option,
1431regardless if they also have the 'BATCH' option or not, they are in the
1432'INTERACTIVE' thread pool.
1433
1434
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001435[[capability_queryLimit]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001436=== Query Limit
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001437
1438Allow site administrators to configure the query limit for users to
1439be above the default hard-coded value of 500. Administrators can add
David Pursehouseb5d99aaf2013-08-09 11:02:48 +09001440a global block to `All-Projects` with group(s) that should have different
1441limits.
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001442
1443When applying a query limit to a user the largest value granted by
1444any of their groups is used.
1445
1446This limit applies not only to the link:cmd-query.html[`gerrit query`]
David Pursehouse799dcfe2020-05-27 11:42:44 +09001447command, but also to the web UI results pagination size.
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001448
1449
Sabari Ajay Kumarda8a8ef2018-11-24 23:40:57 -08001450[[capability_readAs]]
1451=== Read As
1452
1453Allow users to impersonate any user to see which refs they can read.
1454
1455
Shawn Pearcebb027b02013-06-10 14:35:39 -07001456[[capability_runAs]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001457=== Run As
Shawn Pearcebb027b02013-06-10 14:35:39 -07001458
Shawn Pearcef3ffd082013-06-12 11:21:35 -07001459Allow users to impersonate any other user with the `X-Gerrit-RunAs`
1460HTTP header on REST API calls, or the link:cmd-suexec.html[suexec]
1461SSH command.
1462
1463When impersonating an administrator the Administrate Server capability
1464is not honored. This security feature tries to prevent a role with
1465Run As capability from modifying the access controls in All-Projects,
1466however modification may still be possible if the impersonated user
1467has permission to push or submit changes on `refs/meta/config`. Run
1468As also blocks using most capabilities including Create User, Run
1469Garbage Collection, etc., unless the capability is also explicitly
1470granted to a group the administrator is a member of.
1471
1472Administrators do not automatically inherit this capability; it must
1473be explicitly granted.
Shawn Pearcebb027b02013-06-10 14:35:39 -07001474
1475
Edwin Kempin619169b2012-02-09 15:47:52 +01001476[[capability_runGC]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001477=== Run Garbage Collection
Edwin Kempin619169b2012-02-09 15:47:52 +01001478
1479Allow users to run the Git garbage collection for the repositories of
1480all projects.
1481
1482
Ed Bartoshd168b812013-04-13 20:15:58 +03001483[[capability_streamEvents]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001484=== Stream Events
Ed Bartoshd168b812013-04-13 20:15:58 +03001485
1486Allow performing streaming of Gerrit events. This capability
1487allows the granted group to
1488link:cmd-stream-events.html[stream Gerrit events via ssh].
1489
1490
Han-Wen Nienhuysa0ce3bb2018-04-17 14:35:10 +02001491[[capability_viewAccess]]
1492=== View Access
1493
1494Allow checking access rights for arbitrary (user, project) pairs,
1495using the link:rest-api-projects.html#check-access[check.access]
1496endpoint
1497
Dave Borowitzf3548a92014-02-20 11:02:19 -08001498[[capability_viewAllAccounts]]
1499=== View All Accounts
1500
1501Allow viewing all accounts for purposes of auto-completion, regardless
1502of link:config-gerrit.html#accounts.visibility[accounts.visibility]
1503setting.
1504
Edwin Kempined777162017-11-15 08:23:40 -08001505This capability allows to view all accounts but not all account data.
1506E.g. secondary emails of all accounts can only be viewed with the
1507link:#capability_modifyAccount[Modify Account] capability.
1508
Dave Borowitzf3548a92014-02-20 11:02:19 -08001509
Fredrik Luthander9c7da662012-03-13 17:49:27 +01001510[[capability_viewCaches]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001511=== View Caches
Fredrik Luthander9c7da662012-03-13 17:49:27 +01001512
Fredrik Luthander48603002012-03-21 18:17:17 +01001513Allow querying for status of Gerrit's internal caches. This capability allows
Fredrik Luthander9c7da662012-03-13 17:49:27 +01001514the granted group to
1515link:cmd-show-caches.html[look at some or all Gerrit caches via ssh].
1516
1517
Fredrik Luthander48603002012-03-21 18:17:17 +01001518[[capability_viewConnections]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001519=== View Connections
Fredrik Luthander48603002012-03-21 18:17:17 +01001520
1521Allow querying for status of Gerrit's current client connections. This
1522capability allows the granted group to
1523link:cmd-show-connections.html[look at Gerrit's current connections via ssh].
1524
1525
Edwin Kempin362b14d12014-05-09 14:18:12 +02001526[[capability_viewPlugins]]
1527=== View Plugins
1528
1529Allow viewing the list of installed plugins.
1530
1531
Fredrik Luthander48603002012-03-21 18:17:17 +01001532[[capability_viewQueue]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001533=== View Queue
Fredrik Luthander48603002012-03-21 18:17:17 +01001534
1535Allow querying for status of Gerrit's internal task queue. This capability
1536allows the granted group to
1537link:cmd-show-queue.html[look at the Gerrit task queue via ssh].
1538
1539
Han-Wen Nienhuyscc3bd442018-02-01 19:30:30 +01001540[[reference]]
1541== Permission evaluation reference
1542
1543Permission evaluation is expressed in the following concepts:
1544
1545* PermisssionRule: a single combination of {ALLOW, DENY, BLOCK} and
1546group, and optionally a vote range and an 'exclusive' bit.
1547
1548* Permission: groups PermissionRule by permission name. All
1549PermissionRules for same access type (eg. "read", "push") are grouped
1550into a Permission implicitly. The exclusive bit lives here.
1551
1552* AccessSection: ties a list of Permissions to a single ref pattern.
1553Each AccessSection comes from a single project.
1554
1555
1556
1557Here is how these play out in a link:config-project-config.html[project.config] file:
1558
1559----
1560 # An AccessSection
1561 [access "refs/heads/stable/*"]
1562 exclusiveGroupPermissions = create
1563
1564 # Each of the following lines corresponds to a PermissionRule
1565 # The next two PermissionRule together form the "read" Permission
1566 read = group Administrators
1567 read = group Registered Users
1568
1569 # A Permission with a block and block-override
1570 create = block group Registered Users
1571 create = group Project Owners
1572
1573 # A Permission and PermissionRule for a label
1574 label-Code-Review = -2..+2 group Project Owners
1575----
1576
1577=== Ref permissions
1578
1579Access to refs can be blocked, allowed or denied.
1580
1581==== BLOCK
1582
1583For blocking access, all rules marked BLOCK are tested, and if one
1584such rule matches, the user is denied access.
1585
1586The rules are ordered by inheritance, starting from All-Projects down.
1587Within a project, more specific ref patterns come first. The downward
1588ordering lets administrators enforce access rules across all projects
1589in a site.
1590
1591BLOCK rules can have exceptions defined on the same project (eg. BLOCK
1592anonymous users, ie. everyone, but make an exception for Admin users),
1593either by:
1594
15951. adding ALLOW PermissionRules in the same Permission. This implies
1596they apply to the same ref pattern.
1597
15982. adding an ALLOW Permission in the same project with a more specific
1599ref pattern, but marked "exclusive". This allows them to apply to
1600different ref patterns.
1601
1602Such additions not only bypass BLOCK rules, but they will also grant
1603permissions when they are processed in the ALLOW/DENY processing, as
1604described in the next subsection.
1605
1606==== ALLOW
1607
1608For allowing access, all ALLOW/DENY rules that might apply to a ref
1609are tested until one granting access is found, or until either an
1610"exclusive" rule ends the search, or all rules have been tested.
1611
1612The rules are ordered from specific ref patterns to general patterns,
1613and for equally specific patterns, from originating project up to
1614All-Projects.
1615
1616This ordering lets project owners apply permissions specific to their
1617project, overwriting the site defaults specified in All-Projects.
1618
1619==== DENY
1620
1621DENY is processed together with ALLOW.
1622
1623As said, during ALLOW/DENY processing, rules are tried out one by one.
1624For each (permission, ref-pattern, group) only a single rule
1625ALLOW/DENY rule is picked. If that first rule is a DENY rule, any
1626following ALLOW rules for the same (permission, ref-pattern, group)
1627will be ignored, canceling out their effect.
1628
1629DENY is confusing because it only works on a specific (ref-pattern,
1630group) pair. The parent project can undo the effect of a DENY rule by
1631introducing an extra rule which features a more general ref pattern or
1632a different group.
1633
1634==== DENY/ALLOW example
1635
1636Consider the ref "refs/a" and the following configuration:
1637----
1638
1639child-project: project.config
1640 [access "refs/a"]
1641 read = deny group A
1642
1643All-Projects: project.config
1644 [access "refs/a"]
1645 read = group A # ALLOW
1646 [access "refs/*"]
1647 read = group B # ALLOW
1648----
1649
1650When determining access, first "read = DENY group A" on "refs/a" is
1651encountered. The following rule to consider is "ALLOW read group A" on
1652"refs/a". The latter rule applies to the same (permission,
1653ref-pattern, group) tuple, so it it is ignored.
1654
1655The DENY rule does not affect the last rule for "refs/*", since that
1656has a different ref pattern and a different group. If group B is a
1657superset of group A, the last rule will still grant group A access to
1658"refs/a".
1659
1660
1661==== Double use of exclusive
1662
1663An 'exclusive' permission is evaluated both during BLOCK processing
1664and during ALLOW/DENY: when looking BLOCK, 'exclusive' stops the
1665search downward, while the same permission in the ALLOW/DENY
1666processing will stop looking upward for further rule matches
1667
1668==== Force permission
1669
1670The 'force' setting may be set on ALLOW and BLOCK rules. In the case
1671of ALLOW, the 'force' option makes the permission stronger (allowing
1672both forced and unforced actions). For BLOCK, the 'force' option makes
1673it weaker (the BLOCK with 'force' only blocks forced actions).
1674
1675
1676=== Labels
1677
1678Labels use the same mechanism, with the following observations:
1679
1680* The 'force' setting has no effect on label ranges.
1681
1682* BLOCK specifies the values that a group cannot vote, eg.
David Shevitzc89249b2018-09-21 10:04:20 -07001683+
Han-Wen Nienhuyscc3bd442018-02-01 19:30:30 +01001684----
1685 label-Code-Review = block -2..+2 group Anonymous Users
1686----
David Shevitzc89249b2018-09-21 10:04:20 -07001687+
Han-Wen Nienhuyscc3bd442018-02-01 19:30:30 +01001688prevents all users from voting -2 or +2.
1689
1690* DENY works for votes too, with the same caveats
1691
1692* The blocked vote range is the union of the all the blocked vote
1693ranges across projects, so in
David Shevitzc89249b2018-09-21 10:04:20 -07001694+
Han-Wen Nienhuyscc3bd442018-02-01 19:30:30 +01001695----
1696All-Projects: project.config
1697 label-Code-Review = block -2..+1 group A
1698
1699Child-Project: project-config
1700 label-Code-Review = block -1..+2 group A
1701----
David Shevitzc89249b2018-09-21 10:04:20 -07001702+
Han-Wen Nienhuyscc3bd442018-02-01 19:30:30 +01001703members of group A cannot vote at all in the Child-Project.
1704
1705
1706* The allowed vote range is the union of vote ranges allowed by all of
1707the ALLOW rules. For example, in
David Shevitzc89249b2018-09-21 10:04:20 -07001708+
Han-Wen Nienhuyscc3bd442018-02-01 19:30:30 +01001709----
1710 label-Code-Review = -2..+1 group A
1711 label-Code-Review = -1..+2 group B
1712----
David Shevitzc89249b2018-09-21 10:04:20 -07001713+
Han-Wen Nienhuyscc3bd442018-02-01 19:30:30 +01001714a user that is both in A and B can vote -2..2.
1715
1716
Shawn O. Pearce5500e692009-05-28 15:55:01 -07001717GERRIT
1718------
1719Part of link:index.html[Gerrit Code Review]
Yuxuan 'fishy' Wang99cb68d2013-10-31 17:26:00 -07001720
1721SEARCHBOX
1722---------