@@ -14,6 +14,7 @@ import (
14
14
"code.gitea.io/gitea/models/unit"
15
15
user_model "code.gitea.io/gitea/models/user"
16
16
"code.gitea.io/gitea/modules/log"
17
+ "code.gitea.io/gitea/modules/util"
17
18
)
18
19
19
20
// Permission contains all the permissions related variables to a repository for a user
@@ -40,15 +41,17 @@ func (p *Permission) HasAccess() bool {
40
41
41
42
// UnitAccessMode returns current user access mode to the specify unit of the repository
42
43
func (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
48
52
}
49
- return perm_model .AccessModeNone
50
53
}
51
- return p . UnitsMode [ unitType ]
54
+ return perm_model . AccessModeNone
52
55
}
53
56
54
57
// CanAccess returns true if user has mode access to the unit of the repository
0 commit comments