@@ -14,6 +14,7 @@ import (
1414 "code.gitea.io/gitea/models/unit"
1515 user_model "code.gitea.io/gitea/models/user"
1616 "code.gitea.io/gitea/modules/log"
17+ "code.gitea.io/gitea/modules/util"
1718)
1819
1920// Permission contains all the permissions related variables to a repository for a user
@@ -40,15 +41,17 @@ func (p *Permission) HasAccess() bool {
4041
4142// UnitAccessMode returns current user access mode to the specify unit of the repository
4243func (p * Permission ) UnitAccessMode (unitType unit.Type ) perm_model.AccessMode {
43- if len (p .UnitsMode ) == 0 {
44- for _ , u := range p .Units {
45- if u .Type == unitType {
46- return p .AccessMode
47- }
44+ // if the units map contains the access mode, use it, but admin/owner mode could override it
45+ if m , ok := p .UnitsMode [unitType ]; ok {
46+ return util .Iif (p .AccessMode >= perm_model .AccessModeAdmin , p .AccessMode , m )
47+ }
48+ // if the units map does not contain the access mode, return the default access mode if the unit exists
49+ for _ , u := range p .Units {
50+ if u .Type == unitType {
51+ return p .AccessMode
4852 }
49- return perm_model .AccessModeNone
5053 }
51- return p . UnitsMode [ unitType ]
54+ return perm_model . AccessModeNone
5255}
5356
5457// CanAccess returns true if user has mode access to the unit of the repository
0 commit comments