diff --git a/models/group/group_team.go b/models/group/group_team.go new file mode 100644 index 0000000000..7080832146 --- /dev/null +++ b/models/group/group_team.go @@ -0,0 +1,42 @@ +package group + +import ( + "code.gitea.io/gitea/models/db" + "context" +) + +// GroupTeam represents a relation for a team's access to a group +type GroupTeam struct { + ID int64 `xorm:"pk autoincr"` + OrgID int64 `xorm:"INDEX"` + TeamID int64 `xorm:"UNIQUE(s)"` + GroupID int64 `xorm:"UNIQUE(s)"` +} + +// HasTeamGroup returns true if the given group belongs to team. +func HasTeamGroup(ctx context.Context, orgID, teamID, groupID int64) bool { + has, _ := db.GetEngine(ctx). + Where("org_id=?", orgID). + And("team_id=?", teamID). + And("group_id=?", groupID). + Get(new(GroupTeam)) + return has +} + +func AddTeamGroup(ctx context.Context, orgID, teamID, groupID int64) error { + _, err := db.GetEngine(ctx).Insert(&GroupTeam{ + OrgID: orgID, + GroupID: groupID, + TeamID: teamID, + }) + return err +} + +func RemoveTeamGroup(ctx context.Context, orgID, teamID, groupID int64) error { + _, err := db.DeleteByBean(ctx, &GroupTeam{ + TeamID: teamID, + GroupID: groupID, + OrgID: orgID, + }) + return err +} diff --git a/models/group/group_unit.go b/models/group/group_unit.go new file mode 100644 index 0000000000..89b3c131cf --- /dev/null +++ b/models/group/group_unit.go @@ -0,0 +1,25 @@ +package group + +import ( + "code.gitea.io/gitea/models/db" + "code.gitea.io/gitea/models/perm" + "code.gitea.io/gitea/models/unit" + "context" +) + +// GroupUnit describes all units of a repository group +type GroupUnit struct { + ID int64 `xorm:"pk autoincr"` + GroupID int64 `xorm:"INDEX"` + TeamID int64 `xorm:"UNIQUE(s)"` + Type unit.Type `xorm:"UNIQUE(s)"` + AccessMode perm.AccessMode +} + +func (g *GroupUnit) Unit() unit.Unit { + return unit.Units[g.Type] +} + +func getUnitsByGroupID(ctx context.Context, groupID int64) (units []*GroupUnit, err error) { + return units, db.GetEngine(ctx).Where("group_id = ?", groupID).Find(&units) +}