@@ -177,6 +177,7 @@ func (p *Permission) LogString() string {
177177
178178func applyEveryoneRepoPermission (user * user_model.User , perm * Permission ) {
179179 if user == nil || user .ID <= 0 {
180+ perm .units = nil
180181 return
181182 }
182183 for _ , u := range perm .units {
@@ -187,6 +188,25 @@ func applyEveryoneRepoPermission(user *user_model.User, perm *Permission) {
187188 perm .everyoneAccessMode [u .Type ] = u .EveryoneAccessMode
188189 }
189190 }
191+ // remove no permission units
192+ origPermUnits := perm .units
193+ perm .units = make ([]* repo_model.RepoUnit , 0 , len (perm .units ))
194+ for _ , u := range origPermUnits {
195+ shouldKeep := false
196+ for t := range perm .unitsMode {
197+ if shouldKeep = u .Type == t ; shouldKeep {
198+ break
199+ }
200+ }
201+ for t := range perm .everyoneAccessMode {
202+ if shouldKeep = shouldKeep || u .Type == t ; shouldKeep {
203+ break
204+ }
205+ }
206+ if shouldKeep {
207+ perm .units = append (perm .units , u )
208+ }
209+ }
190210}
191211
192212// GetUserRepoPermission returns the user permissions to the repository
@@ -195,9 +215,7 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
195215 if err == nil {
196216 applyEveryoneRepoPermission (user , & perm )
197217 }
198- if log .IsTrace () {
199- log .Trace ("Permission Loaded for user %-v in repo %-v, permissions: %-+v" , user , repo , perm )
200- }
218+ log .Trace ("Permission Loaded for user %-v in repo %-v, permissions: %-+v" , user , repo , perm )
201219 }()
202220
203221 if err = repo .LoadUnits (ctx ); err != nil {
@@ -294,16 +312,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
294312 }
295313 }
296314
297- // remove no permission units
298- perm .units = make ([]* repo_model.RepoUnit , 0 , len (repo .Units ))
299- for t := range perm .unitsMode {
300- for _ , u := range repo .Units {
301- if u .Type == t {
302- perm .units = append (perm .units , u )
303- }
304- }
305- }
306-
307315 return perm , err
308316}
309317
0 commit comments