1
0
Fork 0
forked from forgejo/forgejo

Add units to team (#947)

* add units to team

* fix lint

* finish team setting backend

* finished permission controll on routes

* fix import blank line

* add unit check on ssh/http pull and push and fix test failed

* fix fixtures data

* remove unused code
This commit is contained in:
Lunny Xiao 2017-05-18 22:54:24 +08:00 committed by GitHub
parent 5db5e16ab6
commit fd6034aaf2
18 changed files with 366 additions and 113 deletions

View file

@ -329,8 +329,61 @@ func (repo *Repository) getUnits(e Engine) (err error) {
return err
}
func getUnitsByRepoID(e Engine, repoID int64) (units []*RepoUnit, err error) {
return units, e.Where("repo_id = ?", repoID).Find(&units)
// CheckUnitUser check whether user could visit the unit of this repository
func (repo *Repository) CheckUnitUser(userID int64, unitType UnitType) bool {
if err := repo.getUnitsByUserID(x, userID); err != nil {
return false
}
for _, unit := range repo.Units {
if unit.Type == unitType {
return true
}
}
return false
}
// LoadUnitsByUserID loads units according userID's permissions
func (repo *Repository) LoadUnitsByUserID(userID int64) error {
return repo.getUnitsByUserID(x, userID)
}
func (repo *Repository) getUnitsByUserID(e Engine, userID int64) (err error) {
if repo.Units != nil {
return nil
}
err = repo.getUnits(e)
if err != nil {
return err
}
if !repo.Owner.IsOrganization() || userID == 0 {
return nil
}
teams, err := getUserTeams(e, repo.OwnerID, userID)
if err != nil {
return err
}
var allTypes = make(map[UnitType]struct{}, len(allRepUnitTypes))
for _, team := range teams {
for _, unitType := range team.UnitTypes {
allTypes[unitType] = struct{}{}
}
}
// unique
var newRepoUnits = make([]*RepoUnit, 0, len(repo.Units))
for _, u := range repo.Units {
if _, ok := allTypes[u.Type]; ok {
newRepoUnits = append(newRepoUnits, u)
}
}
repo.Units = newRepoUnits
return nil
}
// EnableUnit if this repository enabled some unit
@ -1595,6 +1648,7 @@ func DeleteRepository(uid, repoID int64) error {
&Release{RepoID: repoID},
&Collaboration{RepoID: repoID},
&PullRequest{BaseRepoID: repoID},
&RepoUnit{RepoID: repoID},
); err != nil {
return fmt.Errorf("deleteBeans: %v", err)
}