Commit 04a79175 by Torkel Ödegaard

fix(plugins): only add app nav link if it has any pages/dashboards with role…

fix(plugins): only add app nav link if it has any pages/dashboards with role matching current user, fixes #4784
parent 97656d65
...@@ -103,6 +103,10 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) { ...@@ -103,6 +103,10 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
} }
for _, include := range plugin.Includes { for _, include := range plugin.Includes {
if !c.HasUserRole(include.Role) {
continue
}
if include.Type == "page" && include.AddToNav { if include.Type == "page" && include.AddToNav {
link := &dtos.NavLink{ link := &dtos.NavLink{
Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/page/" + include.Slug, Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/page/" + include.Slug,
...@@ -110,6 +114,7 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) { ...@@ -110,6 +114,7 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
} }
appLink.Children = append(appLink.Children, link) appLink.Children = append(appLink.Children, link)
} }
if include.Type == "dashboard" && include.AddToNav { if include.Type == "dashboard" && include.AddToNav {
link := &dtos.NavLink{ link := &dtos.NavLink{
Url: setting.AppSubUrl + "/dashboard/db/" + include.Slug, Url: setting.AppSubUrl + "/dashboard/db/" + include.Slug,
...@@ -124,7 +129,9 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) { ...@@ -124,7 +129,9 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
appLink.Children = append(appLink.Children, &dtos.NavLink{Text: "Plugin Config", Icon: "fa fa-cog", Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/edit"}) appLink.Children = append(appLink.Children, &dtos.NavLink{Text: "Plugin Config", Icon: "fa fa-cog", Url: setting.AppSubUrl + "/plugins/" + plugin.Id + "/edit"})
} }
data.MainNavLinks = append(data.MainNavLinks, appLink) if len(appLink.Children) > 0 {
data.MainNavLinks = append(data.MainNavLinks, appLink)
}
} }
} }
......
package models package models
import ( import (
"encoding/json"
"errors" "errors"
"fmt"
"time" "time"
) )
...@@ -37,6 +39,26 @@ func (r RoleType) Includes(other RoleType) bool { ...@@ -37,6 +39,26 @@ func (r RoleType) Includes(other RoleType) bool {
return r == other return r == other
} }
func (r *RoleType) UnmarshalJSON(data []byte) error {
var str string
err := json.Unmarshal(data, &str)
if err != nil {
return err
}
*r = RoleType(str)
if (*r).IsValid() == false {
if (*r) != "" {
return errors.New(fmt.Sprintf("JSON validation error: invalid role value: %s", *r))
}
*r = ROLE_VIEWER
}
return nil
}
type OrgUser struct { type OrgUser struct {
Id int64 Id int64
OrgId int64 OrgId int64
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
"strings" "strings"
"github.com/grafana/grafana/pkg/log" "github.com/grafana/grafana/pkg/log"
"github.com/grafana/grafana/pkg/models" m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
) )
...@@ -69,6 +69,12 @@ func (pb *PluginBase) registerPlugin(pluginDir string) error { ...@@ -69,6 +69,12 @@ func (pb *PluginBase) registerPlugin(pluginDir string) error {
pb.Dependencies.GrafanaVersion = "*" pb.Dependencies.GrafanaVersion = "*"
} }
for _, include := range pb.Includes {
if include.Role == "" {
include.Role = m.RoleType(m.ROLE_VIEWER)
}
}
pb.PluginDir = pluginDir pb.PluginDir = pluginDir
Plugins[pb.Id] = pb Plugins[pb.Id] = pb
return nil return nil
...@@ -80,14 +86,14 @@ type PluginDependencies struct { ...@@ -80,14 +86,14 @@ type PluginDependencies struct {
} }
type PluginInclude struct { type PluginInclude struct {
Name string `json:"name"` Name string `json:"name"`
Path string `json:"path"` Path string `json:"path"`
Type string `json:"type"` Type string `json:"type"`
Component string `json:"component"` Component string `json:"component"`
Role models.RoleType `json:"role"` Role m.RoleType `json:"role"`
AddToNav bool `json:"addToNav"` AddToNav bool `json:"addToNav"`
DefaultNav bool `json:"defaultNav"` DefaultNav bool `json:"defaultNav"`
Slug string `json:"slug"` Slug string `json:"slug"`
Id string `json:"-"` Id string `json:"-"`
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment