@@ -329,8 +329,61 @@ func (repo *Repository) getUnits(e Engine) (err error) {
329
329
return err
330
330
}
331
331
332
- func getUnitsByRepoID (e Engine , repoID int64 ) (units []* RepoUnit , err error ) {
333
- return units , e .Where ("repo_id = ?" , repoID ).Find (& units )
332
+ // CheckUnitUser check whether user could visit the unit of this repository
333
+ func (repo * Repository ) CheckUnitUser (userID int64 , unitType UnitType ) bool {
334
+ if err := repo .getUnitsByUserID (x , userID ); err != nil {
335
+ return false
336
+ }
337
+
338
+ for _ , unit := range repo .Units {
339
+ if unit .Type == unitType {
340
+ return true
341
+ }
342
+ }
343
+ return false
344
+ }
345
+
346
+ // LoadUnitsByUserID loads units according userID's permissions
347
+ func (repo * Repository ) LoadUnitsByUserID (userID int64 ) error {
348
+ return repo .getUnitsByUserID (x , userID )
349
+ }
350
+
351
+ func (repo * Repository ) getUnitsByUserID (e Engine , userID int64 ) (err error ) {
352
+ if repo .Units != nil {
353
+ return nil
354
+ }
355
+
356
+ err = repo .getUnits (e )
357
+ if err != nil {
358
+ return err
359
+ }
360
+
361
+ if ! repo .Owner .IsOrganization () || userID == 0 {
362
+ return nil
363
+ }
364
+
365
+ teams , err := getUserTeams (e , repo .OwnerID , userID )
366
+ if err != nil {
367
+ return err
368
+ }
369
+
370
+ var allTypes = make (map [UnitType ]struct {}, len (allRepUnitTypes ))
371
+ for _ , team := range teams {
372
+ for _ , unitType := range team .UnitTypes {
373
+ allTypes [unitType ] = struct {}{}
374
+ }
375
+ }
376
+
377
+ // unique
378
+ var newRepoUnits = make ([]* RepoUnit , 0 , len (repo .Units ))
379
+ for _ , u := range repo .Units {
380
+ if _ , ok := allTypes [u .Type ]; ok {
381
+ newRepoUnits = append (newRepoUnits , u )
382
+ }
383
+ }
384
+
385
+ repo .Units = newRepoUnits
386
+ return nil
334
387
}
335
388
336
389
// EnableUnit if this repository enabled some unit
@@ -1595,6 +1648,7 @@ func DeleteRepository(uid, repoID int64) error {
1595
1648
& Release {RepoID : repoID },
1596
1649
& Collaboration {RepoID : repoID },
1597
1650
& PullRequest {BaseRepoID : repoID },
1651
+ & RepoUnit {RepoID : repoID },
1598
1652
); err != nil {
1599
1653
return fmt .Errorf ("deleteBeans: %v" , err )
1600
1654
}
0 commit comments