mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
add uid to team table (#66920)
* add uid to team table * concat * add prefix to transition uids --------- Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
This commit is contained in:
parent
10109eaf00
commit
7572988305
@ -24,6 +24,19 @@ func addTeamMigrations(mg *Migrator) {
|
|||||||
mg.AddMigration("add index team.org_id", NewAddIndexMigration(teamV1, teamV1.Indices[0]))
|
mg.AddMigration("add index team.org_id", NewAddIndexMigration(teamV1, teamV1.Indices[0]))
|
||||||
mg.AddMigration("add unique index team_org_id_name", NewAddIndexMigration(teamV1, teamV1.Indices[1]))
|
mg.AddMigration("add unique index team_org_id_name", NewAddIndexMigration(teamV1, teamV1.Indices[1]))
|
||||||
|
|
||||||
|
mg.AddMigration("Add column uid in team", NewAddColumnMigration(teamV1, &Column{
|
||||||
|
Name: "uid", Type: DB_NVarchar, Length: 40, Nullable: true,
|
||||||
|
}))
|
||||||
|
|
||||||
|
mg.AddMigration("Update uid column values in team", NewRawSQLMigration("").
|
||||||
|
SQLite("UPDATE team SET uid=printf('t%09d',id) WHERE uid IS NULL;").
|
||||||
|
Postgres("UPDATE team SET uid='t' || lpad('' || id::text,9,'0') WHERE uid IS NULL;").
|
||||||
|
Mysql("UPDATE team SET uid=concat('t',lpad(id,9,'0')) WHERE uid IS NULL;"))
|
||||||
|
|
||||||
|
mg.AddMigration("Add unique index team_org_id_uid", NewAddIndexMigration(teamV1, &Index{
|
||||||
|
Cols: []string{"org_id", "uid"}, Type: UniqueIndex,
|
||||||
|
}))
|
||||||
|
|
||||||
teamMemberV1 := Table{
|
teamMemberV1 := Table{
|
||||||
Name: "team_member",
|
Name: "team_member",
|
||||||
Columns: []*Column{
|
Columns: []*Column{
|
||||||
|
@ -23,6 +23,7 @@ var (
|
|||||||
// Team model
|
// Team model
|
||||||
type Team struct {
|
type Team struct {
|
||||||
ID int64 `json:"id" xorm:"pk autoincr 'id'"`
|
ID int64 `json:"id" xorm:"pk autoincr 'id'"`
|
||||||
|
UID string `json:"uid" xorm:"uid"`
|
||||||
OrgID int64 `json:"orgId" xorm:"org_id"`
|
OrgID int64 `json:"orgId" xorm:"org_id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
@ -82,6 +83,7 @@ type SearchTeamsQuery struct {
|
|||||||
|
|
||||||
type TeamDTO struct {
|
type TeamDTO struct {
|
||||||
ID int64 `json:"id" xorm:"id"`
|
ID int64 `json:"id" xorm:"id"`
|
||||||
|
UID string `json:"uid" xorm:"uid"`
|
||||||
OrgID int64 `json:"orgId" xorm:"org_id"`
|
OrgID int64 `json:"orgId" xorm:"org_id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
@ -145,6 +147,7 @@ type RemoveTeamMemberCommand struct {
|
|||||||
type GetTeamMembersQuery struct {
|
type GetTeamMembersQuery struct {
|
||||||
OrgID int64
|
OrgID int64
|
||||||
TeamID int64
|
TeamID int64
|
||||||
|
TeamUID string
|
||||||
UserID int64
|
UserID int64
|
||||||
External bool
|
External bool
|
||||||
SignedInUser *user.SignedInUser
|
SignedInUser *user.SignedInUser
|
||||||
@ -156,6 +159,7 @@ type GetTeamMembersQuery struct {
|
|||||||
type TeamMemberDTO struct {
|
type TeamMemberDTO struct {
|
||||||
OrgID int64 `json:"orgId" xorm:"org_id"`
|
OrgID int64 `json:"orgId" xorm:"org_id"`
|
||||||
TeamID int64 `json:"teamId" xorm:"team_id"`
|
TeamID int64 `json:"teamId" xorm:"team_id"`
|
||||||
|
TeamUID string `json:"teamUID" xorm:"uid"`
|
||||||
UserID int64 `json:"userId" xorm:"user_id"`
|
UserID int64 `json:"userId" xorm:"user_id"`
|
||||||
External bool `json:"-"`
|
External bool `json:"-"`
|
||||||
AuthModule string `json:"auth_module"`
|
AuthModule string `json:"auth_module"`
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/services/team"
|
"github.com/grafana/grafana/pkg/services/team"
|
||||||
"github.com/grafana/grafana/pkg/services/user"
|
"github.com/grafana/grafana/pkg/services/user"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
|
"github.com/grafana/grafana/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type store interface {
|
type store interface {
|
||||||
@ -67,6 +68,7 @@ func getTeamMemberCount(db db.DB, filteredUsers []string) string {
|
|||||||
func getTeamSelectSQLBase(db db.DB, filteredUsers []string) string {
|
func getTeamSelectSQLBase(db db.DB, filteredUsers []string) string {
|
||||||
return `SELECT
|
return `SELECT
|
||||||
team.id as id,
|
team.id as id,
|
||||||
|
team.uid,
|
||||||
team.org_id,
|
team.org_id,
|
||||||
team.name as name,
|
team.name as name,
|
||||||
team.email as email, ` +
|
team.email as email, ` +
|
||||||
@ -77,6 +79,7 @@ func getTeamSelectSQLBase(db db.DB, filteredUsers []string) string {
|
|||||||
func getTeamSelectWithPermissionsSQLBase(db db.DB, filteredUsers []string) string {
|
func getTeamSelectWithPermissionsSQLBase(db db.DB, filteredUsers []string) string {
|
||||||
return `SELECT
|
return `SELECT
|
||||||
team.id AS id,
|
team.id AS id,
|
||||||
|
team.uid,
|
||||||
team.org_id,
|
team.org_id,
|
||||||
team.name AS name,
|
team.name AS name,
|
||||||
team.email AS email,
|
team.email AS email,
|
||||||
@ -88,6 +91,7 @@ func getTeamSelectWithPermissionsSQLBase(db db.DB, filteredUsers []string) strin
|
|||||||
|
|
||||||
func (ss *xormStore) Create(name, email string, orgID int64) (team.Team, error) {
|
func (ss *xormStore) Create(name, email string, orgID int64) (team.Team, error) {
|
||||||
t := team.Team{
|
t := team.Team{
|
||||||
|
UID: util.GenerateShortUID(),
|
||||||
Name: name,
|
Name: name,
|
||||||
Email: email,
|
Email: email,
|
||||||
OrgID: orgID,
|
OrgID: orgID,
|
||||||
@ -536,6 +540,7 @@ func (ss *xormStore) getTeamMembers(ctx context.Context, query *team.GetTeamMemb
|
|||||||
sess.Join("INNER", ss.db.GetDialect().Quote("user"),
|
sess.Join("INNER", ss.db.GetDialect().Quote("user"),
|
||||||
fmt.Sprintf("team_member.user_id=%s.%s", ss.db.GetDialect().Quote("user"), ss.db.GetDialect().Quote("id")),
|
fmt.Sprintf("team_member.user_id=%s.%s", ss.db.GetDialect().Quote("user"), ss.db.GetDialect().Quote("id")),
|
||||||
)
|
)
|
||||||
|
sess.Join("INNER", "team", "team.id=team_member.team_id")
|
||||||
|
|
||||||
// explicitly check for serviceaccounts
|
// explicitly check for serviceaccounts
|
||||||
sess.Where(fmt.Sprintf("%s.is_service_account=?", ss.db.GetDialect().Quote("user")), ss.db.GetDialect().BooleanStr(false))
|
sess.Where(fmt.Sprintf("%s.is_service_account=?", ss.db.GetDialect().Quote("user")), ss.db.GetDialect().BooleanStr(false))
|
||||||
@ -545,11 +550,12 @@ func (ss *xormStore) getTeamMembers(ctx context.Context, query *team.GetTeamMemb
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Join with only most recent auth module
|
// Join with only most recent auth module
|
||||||
authJoinCondition := `(
|
authJoinCondition := `user_auth.id=(
|
||||||
SELECT id from user_auth
|
SELECT id
|
||||||
|
FROM user_auth
|
||||||
WHERE user_auth.user_id = team_member.user_id
|
WHERE user_auth.user_id = team_member.user_id
|
||||||
ORDER BY user_auth.created DESC `
|
ORDER BY user_auth.created DESC ` +
|
||||||
authJoinCondition = "user_auth.id=" + authJoinCondition + ss.db.GetDialect().Limit(1) + ")"
|
ss.db.GetDialect().Limit(1) + ")"
|
||||||
sess.Join("LEFT", "user_auth", authJoinCondition)
|
sess.Join("LEFT", "user_auth", authJoinCondition)
|
||||||
|
|
||||||
if query.OrgID != 0 {
|
if query.OrgID != 0 {
|
||||||
@ -558,6 +564,9 @@ func (ss *xormStore) getTeamMembers(ctx context.Context, query *team.GetTeamMemb
|
|||||||
if query.TeamID != 0 {
|
if query.TeamID != 0 {
|
||||||
sess.Where("team_member.team_id=?", query.TeamID)
|
sess.Where("team_member.team_id=?", query.TeamID)
|
||||||
}
|
}
|
||||||
|
if query.TeamUID != "" {
|
||||||
|
sess.Where("team.uid=?", query.TeamUID)
|
||||||
|
}
|
||||||
if query.UserID != 0 {
|
if query.UserID != 0 {
|
||||||
sess.Where("team_member.user_id=?", query.UserID)
|
sess.Where("team_member.user_id=?", query.UserID)
|
||||||
}
|
}
|
||||||
@ -574,6 +583,7 @@ func (ss *xormStore) getTeamMembers(ctx context.Context, query *team.GetTeamMemb
|
|||||||
"team_member.external",
|
"team_member.external",
|
||||||
"team_member.permission",
|
"team_member.permission",
|
||||||
"user_auth.auth_module",
|
"user_auth.auth_module",
|
||||||
|
"team.uid",
|
||||||
)
|
)
|
||||||
sess.Asc("user.login", "user.email")
|
sess.Asc("user.login", "user.email")
|
||||||
|
|
||||||
@ -587,10 +597,20 @@ func (ss *xormStore) getTeamMembers(ctx context.Context, query *team.GetTeamMemb
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ss *xormStore) IsAdmin(ctx context.Context, query *team.IsAdminOfTeamsQuery) (bool, error) {
|
func (ss *xormStore) IsAdmin(ctx context.Context, query *team.IsAdminOfTeamsQuery) (bool, error) {
|
||||||
var queryResult bool
|
queryResult := false
|
||||||
|
|
||||||
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
||||||
sql := "SELECT COUNT(team.id) AS count FROM team INNER JOIN team_member ON team_member.team_id = team.id WHERE team.org_id = ? AND team_member.user_id = ? AND team_member.permission = ?"
|
sql := `SELECT COUNT(team.id) AS count
|
||||||
params := []interface{}{query.SignedInUser.OrgID, query.SignedInUser.UserID, dashboards.PERMISSION_ADMIN}
|
FROM team
|
||||||
|
INNER JOIN team_member ON team_member.team_id = team.id
|
||||||
|
WHERE team.org_id = ?
|
||||||
|
AND team_member.user_id = ?
|
||||||
|
AND team_member.permission = ?`
|
||||||
|
params := []interface{}{
|
||||||
|
query.SignedInUser.OrgID,
|
||||||
|
query.SignedInUser.UserID,
|
||||||
|
dashboards.PERMISSION_ADMIN,
|
||||||
|
}
|
||||||
|
|
||||||
type teamCount struct {
|
type teamCount struct {
|
||||||
Count int64
|
Count int64
|
||||||
@ -605,8 +625,6 @@ func (ss *xormStore) IsAdmin(ctx context.Context, query *team.IsAdminOfTeamsQuer
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
|
||||||
return false, err
|
return queryResult, err
|
||||||
}
|
|
||||||
return queryResult, nil
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user