Просмотр исходного кода

Fontend handling of account role to hide user actions and links that the user does not have access to

Torkel Ödegaard 11 лет назад
Родитель
Сommit
1cff564483
5 измененных файлов с 23 добавлено и 22 удалено
  1. 3 1
      conf/grafana.ini
  2. 1 1
      grafana
  3. 10 13
      pkg/api/api.go
  4. 8 7
      pkg/api/dtos/models.go
  5. 1 0
      pkg/middleware/auth.go

+ 3 - 1
conf/grafana.ini

@@ -46,6 +46,8 @@ secret_key = SW2YcwTIb9zpOOhoPsMm
 login_remember_days = 7
 login_remember_days = 7
 cookie_username = grafana_user
 cookie_username = grafana_user
 cookie_remember_name = grafana_remember
 cookie_remember_name = grafana_remember
+; disable user signup / registration
+disable_user_signup = false
 
 
 [account.single]
 [account.single]
 ; Enable this feature to auto assign new users to a single account, suitable for NON multi tenant setups
 ; Enable this feature to auto assign new users to a single account, suitable for NON multi tenant setups
@@ -57,7 +59,7 @@ default_role = Editor
 
 
 [auth.anonymous]
 [auth.anonymous]
 ; enable anonymous access
 ; enable anonymous access
-enabled = false
+enabled = true
 ; specify account name that should be used for unauthenticated users
 ; specify account name that should be used for unauthenticated users
 account_name = main
 account_name = main
 ; specify role for unauthenticated users
 ; specify role for unauthenticated users

+ 1 - 1
grafana

@@ -1 +1 @@
-Subproject commit 017eab8dcd182b8c19f65657fc3d46e30545b7ff
+Subproject commit c75e669204ffd050e3ef23fdab516c425f7fb668

+ 10 - 13
pkg/api/api.go

@@ -31,7 +31,7 @@ func Register(r *macaron.Macaron) {
 	r.Get("/account/users/", reqSignedIn, Index)
 	r.Get("/account/users/", reqSignedIn, Index)
 	r.Get("/account/apikeys/", reqSignedIn, Index)
 	r.Get("/account/apikeys/", reqSignedIn, Index)
 	r.Get("/account/import/", reqSignedIn, Index)
 	r.Get("/account/import/", reqSignedIn, Index)
-	r.Get("/admin/users", reqSignedIn, Index)
+	r.Get("/admin/users", reqGrafanaAdmin, Index)
 	r.Get("/dashboard/*", reqSignedIn, Index)
 	r.Get("/dashboard/*", reqSignedIn, Index)
 
 
 	// sign up
 	// sign up
@@ -104,18 +104,15 @@ func setIndexViewData(c *middleware.Context) error {
 		return err
 		return err
 	}
 	}
 
 
-	currentUser := &dtos.CurrentUser{}
-
-	if c.IsSignedIn {
-		currentUser = &dtos.CurrentUser{
-			Login:            c.Login,
-			Email:            c.Email,
-			Name:             c.Name,
-			UsingAccountName: c.AccountName,
-			GravatarUrl:      dtos.GetGravatarUrl(c.Email),
-			IsGrafanaAdmin:   c.IsGrafanaAdmin,
-			Role:             c.AccountRole,
-		}
+	currentUser := &dtos.CurrentUser{
+		IsSignedIn:     c.IsSignedIn,
+		Login:          c.Login,
+		Email:          c.Email,
+		Name:           c.Name,
+		AccountName:    c.AccountName,
+		AccountRole:    c.AccountRole,
+		GravatarUrl:    dtos.GetGravatarUrl(c.Email),
+		IsGrafanaAdmin: c.IsGrafanaAdmin,
 	}
 	}
 
 
 	c.Data["User"] = currentUser
 	c.Data["User"] = currentUser

+ 8 - 7
pkg/api/dtos/models.go

@@ -15,13 +15,14 @@ type LoginCommand struct {
 }
 }
 
 
 type CurrentUser struct {
 type CurrentUser struct {
-	Login            string     `json:"login"`
-	Email            string     `json:"email"`
-	Role             m.RoleType `json:"role"`
-	Name             string     `json:"name"`
-	UsingAccountName string     `json:"usingAccountName"`
-	IsGrafanaAdmin   bool       `json:"isGrafanaAdmin"`
-	GravatarUrl      string     `json:"gravatarUrl"`
+	IsSignedIn     bool       `json:"isSignedIn"`
+	Login          string     `json:"login"`
+	Email          string     `json:"email"`
+	Name           string     `json:"name"`
+	AccountRole    m.RoleType `json:"accountRole"`
+	AccountName    string     `json:"acountName"`
+	IsGrafanaAdmin bool       `json:"isGrafanaAdmin"`
+	GravatarUrl    string     `json:"gravatarUrl"`
 }
 }
 
 
 type DataSource struct {
 type DataSource struct {

+ 1 - 0
pkg/middleware/auth.go

@@ -70,6 +70,7 @@ func RoleAuth(roles ...m.RoleType) macaron.Handler {
 func Auth(options *AuthOptions) macaron.Handler {
 func Auth(options *AuthOptions) macaron.Handler {
 	return func(c *Context) {
 	return func(c *Context) {
 		if !c.IsGrafanaAdmin && options.ReqGrafanaAdmin {
 		if !c.IsGrafanaAdmin && options.ReqGrafanaAdmin {
+			c.SetCookie("redirect_to", url.QueryEscape(setting.AppSubUrl+c.Req.RequestURI), 0, setting.AppSubUrl+"/")
 			authDenied(c)
 			authDenied(c)
 			return
 			return
 		}
 		}