diff --git a/models/teams.go b/models/teams.go index 1d768601..33863c7f 100644 --- a/models/teams.go +++ b/models/teams.go @@ -7,8 +7,8 @@ type Team struct { Description string `xorm:"varchar(250)" json:"description"` CreatedByID int64 `xorm:"int(11) not null" json:"-"` - CreatedBy User `xorm:"-" json:"created_by"` - Members []*User `xorm:"-" json:"members"` + CreatedBy User `xorm:"-" json:"created_by"` + Members []*TeamUser `xorm:"-" json:"members"` Created int64 `xorm:"created" json:"created"` Updated int64 `xorm:"updated" json:"updated"` @@ -26,6 +26,13 @@ func (Team) TableName() string { func (t *Team) AfterLoad() { // Get the owner t.CreatedBy, _, _ = GetUserByID(t.CreatedByID) + + // Get all members + x.Select("*"). + Table("users"). + Join("INNER", "team_members", "team_members.user_id = users.id"). + Where("team_id = ?", t.ID). + Find(&t.Members) } // TeamMember defines the relationship between a user and a team @@ -47,6 +54,11 @@ func (TeamMember) TableName() string { return "team_members" } +type TeamUser struct { + User `xorm:"extends"` + IsAdmin bool `json:"is_admin"` +} + // TeamNamespace defines the relationship between a Team and a Namespace type TeamNamespace struct { ID int64 `xorm:"int(11) autoincr not null unique pk" json:"id"` @@ -101,3 +113,9 @@ func GetTeamByID(id int64) (team Team, err error) { return } + +// ReadOne implements the CRUD method to get one team +func (t *Team) ReadOne(id int64) (err error) { + *t, err = GetTeamByID(id) + return +} diff --git a/models/teams_read_one.go b/models/teams_read_one.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/models/teams_read_one.go @@ -0,0 +1 @@ +package models diff --git a/models/teams_rights.go b/models/teams_rights.go index a9f58cca..4ea5b9c2 100644 --- a/models/teams_rights.go +++ b/models/teams_rights.go @@ -31,4 +31,12 @@ func (t *Team) IsAdmin(user *User) bool { And("is_admin = ?", true). Get(&TeamMember{}) return exists -} \ No newline at end of file +} + +func (t *Team) CanRead(user *User) bool { + // Check if the user is in the team + exists, _ := x.Where("team_id = ?", t.ID). + And("user_id = ?", user.ID). + Get(&TeamMember{}) + return exists +}