浏览代码

support setting default org role when adding user via grafana.net auth

Dan Cech 9 年之前
父节点
当前提交
630a8ed8aa
共有 5 个文件被更改,包括 23 次插入14 次删除
  1. 5 4
      pkg/api/login_oauth.go
  2. 10 9
      pkg/models/user.go
  3. 5 1
      pkg/services/sqlstore/user.go
  4. 2 0
      pkg/social/grafananet_oauth.go
  5. 1 0
      pkg/social/social.go

+ 5 - 4
pkg/api/login_oauth.go

@@ -83,10 +83,11 @@ func OAuthLogin(ctx *middleware.Context) {
 			return
 		}
 		cmd := m.CreateUserCommand{
-			Login:   userInfo.Email,
-			Email:   userInfo.Email,
-			Name:    userInfo.Name,
-			Company: userInfo.Company,
+			Login:          userInfo.Email,
+			Email:          userInfo.Email,
+			Name:           userInfo.Name,
+			Company:        userInfo.Company,
+			DefaultOrgRole: userInfo.Role,
 		}
 
 		if err = bus.Dispatch(&cmd); err != nil {

+ 10 - 9
pkg/models/user.go

@@ -44,15 +44,16 @@ func (u *User) NameOrFallback() string {
 // COMMANDS
 
 type CreateUserCommand struct {
-	Email         string
-	Login         string
-	Name          string
-	Company       string
-	OrgName       string
-	Password      string
-	EmailVerified bool
-	IsAdmin       bool
-	SkipOrgSetup  bool
+	Email          string
+	Login          string
+	Name           string
+	Company        string
+	OrgName        string
+	Password       string
+	EmailVerified  bool
+	IsAdmin        bool
+	SkipOrgSetup   bool
+	DefaultOrgRole string
 
 	Result User
 }

+ 5 - 1
pkg/services/sqlstore/user.go

@@ -128,7 +128,11 @@ func CreateUser(cmd *m.CreateUserCommand) error {
 			}
 
 			if setting.AutoAssignOrg && !user.IsAdmin {
-				orgUser.Role = m.RoleType(setting.AutoAssignOrgRole)
+				if len(cmd.DefaultOrgRole) > 0 {
+					orgUser.Role = m.RoleType(cmd.DefaultOrgRole)
+				} else {
+					orgUser.Role = m.RoleType(setting.AutoAssignOrgRole)
+				}
 			}
 
 			if _, err = sess.Insert(&orgUser); err != nil {

+ 2 - 0
pkg/social/grafananet_oauth.go

@@ -83,6 +83,7 @@ func (s *SocialGrafanaNet) UserInfo(token *oauth2.Token) (*BasicUserInfo, error)
 		Id    int    `json:"id"`
 		Name  string `json:"login"`
 		Email string `json:"email"`
+		Role  string `json:"role"`
 	}
 
 	var err error
@@ -102,6 +103,7 @@ func (s *SocialGrafanaNet) UserInfo(token *oauth2.Token) (*BasicUserInfo, error)
 		Identity: strconv.Itoa(data.Id),
 		Name:     data.Name,
 		Email:    data.Email,
+		Role:     data.Role,
 	}
 
 	if !s.IsOrganizationMember(client) {

+ 1 - 0
pkg/social/social.go

@@ -15,6 +15,7 @@ type BasicUserInfo struct {
 	Email    string
 	Login    string
 	Company  string
+	Role     string
 }
 
 type SocialConnector interface {