@@ -87,13 +87,20 @@ func (issue *Issue) AfterSet(colName string, _ xorm.Cell) {
87
87
}
88
88
}
89
89
90
- func (issue * Issue ) loadAttributes (e Engine ) (err error ) {
90
+ func (issue * Issue ) loadRepo (e Engine ) (err error ) {
91
91
if issue .Repo == nil {
92
92
issue .Repo , err = getRepositoryByID (e , issue .RepoID )
93
93
if err != nil {
94
94
return fmt .Errorf ("getRepositoryByID [%d]: %v" , issue .RepoID , err )
95
95
}
96
96
}
97
+ return nil
98
+ }
99
+
100
+ func (issue * Issue ) loadAttributes (e Engine ) (err error ) {
101
+ if err := issue .loadRepo (e ); err != nil {
102
+ return err
103
+ }
97
104
98
105
if issue .Poster == nil {
99
106
issue .Poster , err = getUserByID (e , issue .PosterID )
@@ -322,6 +329,16 @@ func (issue *Issue) removeLabel(e *xorm.Session, label *Label) error {
322
329
323
330
// RemoveLabel removes a label from issue by given ID.
324
331
func (issue * Issue ) RemoveLabel (doer * User , label * Label ) error {
332
+ if err := issue .loadRepo (x ); err != nil {
333
+ return err
334
+ }
335
+
336
+ if has , err := HasAccess (doer , issue .Repo , AccessModeWrite ); err != nil {
337
+ return err
338
+ } else if ! has {
339
+ return ErrLabelNotExist {}
340
+ }
341
+
325
342
if err := DeleteIssueLabel (issue , label ); err != nil {
326
343
return err
327
344
}
@@ -353,6 +370,16 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
353
370
return err
354
371
}
355
372
373
+ if err := issue .loadRepo (sess ); err != nil {
374
+ return err
375
+ }
376
+
377
+ if has , err := hasAccess (sess , doer , issue .Repo , AccessModeWrite ); err != nil {
378
+ return err
379
+ } else if ! has {
380
+ return ErrLabelNotExist {}
381
+ }
382
+
356
383
if err = issue .clearLabels (sess ); err != nil {
357
384
return err
358
385
}
0 commit comments