@ -65,6 +65,7 @@ func (s *ServiceImpl) addAppLinks(treeRoot *navtree.NavTreeRoot, c *models.ReqCo
}
func ( s * ServiceImpl ) processAppPlugin ( plugin plugins . PluginDTO , c * models . ReqContext , topNavEnabled bool , treeRoot * navtree . NavTreeRoot ) * navtree . NavLink {
hasAccessToInclude := s . hasAccessToInclude ( c , plugin . ID )
appLink := & navtree . NavLink {
Text : plugin . Name ,
Id : "plugin-page-" + plugin . ID ,
@ -82,7 +83,7 @@ func (s *ServiceImpl) processAppPlugin(plugin plugins.PluginDTO, c *models.ReqCo
}
for _ , include := range plugin . Includes {
if ! c . HasUserRol e( include . Rol e ) {
if ! hasAccessToInclud e( include ) {
continue
}
@ -230,6 +231,23 @@ func (s *ServiceImpl) processAppPlugin(plugin plugins.PluginDTO, c *models.ReqCo
return nil
}
func ( s * ServiceImpl ) hasAccessToInclude ( c * models . ReqContext , pluginID string ) func ( include * plugins . Includes ) bool {
hasAccess := ac . HasAccess ( s . accessControl , c )
return func ( include * plugins . Includes ) bool {
useRBAC := s . features . IsEnabled ( featuremgmt . FlagAccessControlOnCall ) &&
! s . accessControl . IsDisabled ( ) && include . RequiresRBACAction ( )
if useRBAC && ! hasAccess ( ac . ReqHasRole ( include . Role ) , ac . EvalPermission ( include . Action ) ) {
s . log . Debug ( "plugin include is covered by RBAC, user doesn't have access" ,
"plugin" , pluginID ,
"include" , include . Name )
return false
} else if ! useRBAC && ! c . HasUserRole ( include . Role ) {
return false
}
return true
}
}
func ( s * ServiceImpl ) readNavigationSettings ( ) {
s . navigationAppConfig = map [ string ] NavigationAppConfig {
"grafana-k8s-app" : { SectionID : navtree . NavIDMonitoring , SortWeight : 1 , Text : "Kubernetes" } ,