@ -18,8 +18,10 @@ import (
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/log"
ac "github.com/grafana/grafana/pkg/services/accesscontrol"
"github.com/grafana/grafana/pkg/services/accesscontrol/acimpl"
"github.com/grafana/grafana/pkg/services/accesscontrol/acimpl"
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
"github.com/grafana/grafana/pkg/services/dashboards"
"github.com/grafana/grafana/pkg/services/datasources"
"github.com/grafana/grafana/pkg/services/datasources"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/folder"
"github.com/grafana/grafana/pkg/services/folder"
@ -237,7 +239,8 @@ func TestRouteGetNamespaceRulesConfig(t *testing.T) {
err := svc . provenanceStore . SetProvenance ( context . Background ( ) , rule , orgID , models . ProvenanceAPI )
err := svc . provenanceStore . SetProvenance ( context . Background ( ) , rule , orgID , models . ProvenanceAPI )
require . NoError ( t , err )
require . NoError ( t , err )
req := createRequestContext ( orgID , nil )
perms := createPermissionsForRules ( expectedRules , orgID )
req := createRequestContextWithPerms ( orgID , perms , nil )
response := svc . RouteGetNamespaceRulesConfig ( req , folder . UID )
response := svc . RouteGetNamespaceRulesConfig ( req , folder . UID )
require . Equal ( t , http . StatusAccepted , response . Status ( ) )
require . Equal ( t , http . StatusAccepted , response . Status ( ) )
@ -271,7 +274,8 @@ func TestRouteGetNamespaceRulesConfig(t *testing.T) {
expectedRules := models . GenerateAlertRules ( rand . Intn ( 5 ) + 5 , models . AlertRuleGen ( withGroupKey ( groupKey ) , models . WithUniqueGroupIndex ( ) ) )
expectedRules := models . GenerateAlertRules ( rand . Intn ( 5 ) + 5 , models . AlertRuleGen ( withGroupKey ( groupKey ) , models . WithUniqueGroupIndex ( ) ) )
ruleStore . PutRule ( context . Background ( ) , expectedRules ... )
ruleStore . PutRule ( context . Background ( ) , expectedRules ... )
req := createRequestContext ( orgID , nil )
perms := createPermissionsForRules ( expectedRules , orgID )
req := createRequestContextWithPerms ( orgID , perms , nil )
response := createService ( ruleStore ) . RouteGetNamespaceRulesConfig ( req , folder . UID )
response := createService ( ruleStore ) . RouteGetNamespaceRulesConfig ( req , folder . UID )
require . Equal ( t , http . StatusAccepted , response . Status ( ) )
require . Equal ( t , http . StatusAccepted , response . Status ( ) )
@ -354,7 +358,8 @@ func TestRouteGetRulesConfig(t *testing.T) {
expectedRules := models . GenerateAlertRules ( rand . Intn ( 5 ) + 5 , models . AlertRuleGen ( withGroupKey ( groupKey ) , models . WithUniqueGroupIndex ( ) ) )
expectedRules := models . GenerateAlertRules ( rand . Intn ( 5 ) + 5 , models . AlertRuleGen ( withGroupKey ( groupKey ) , models . WithUniqueGroupIndex ( ) ) )
ruleStore . PutRule ( context . Background ( ) , expectedRules ... )
ruleStore . PutRule ( context . Background ( ) , expectedRules ... )
req := createRequestContext ( orgID , nil )
perms := createPermissionsForRules ( expectedRules , orgID )
req := createRequestContextWithPerms ( orgID , perms , nil )
response := createService ( ruleStore ) . RouteGetRulesConfig ( req )
response := createService ( ruleStore ) . RouteGetRulesConfig ( req )
require . Equal ( t , http . StatusOK , response . Status ( ) )
require . Equal ( t , http . StatusOK , response . Status ( ) )
@ -437,7 +442,9 @@ func TestRouteGetRulesGroupConfig(t *testing.T) {
expectedRules := models . GenerateAlertRules ( rand . Intn ( 5 ) + 5 , models . AlertRuleGen ( withGroupKey ( groupKey ) , models . WithUniqueGroupIndex ( ) ) )
expectedRules := models . GenerateAlertRules ( rand . Intn ( 5 ) + 5 , models . AlertRuleGen ( withGroupKey ( groupKey ) , models . WithUniqueGroupIndex ( ) ) )
ruleStore . PutRule ( context . Background ( ) , expectedRules ... )
ruleStore . PutRule ( context . Background ( ) , expectedRules ... )
req := createRequestContext ( orgID , nil )
perms := createPermissionsForRules ( expectedRules , orgID )
req := createRequestContextWithPerms ( orgID , perms , nil )
response := createService ( ruleStore ) . RouteGetRulesGroupConfig ( req , folder . UID , groupKey . RuleGroup )
response := createService ( ruleStore ) . RouteGetRulesGroupConfig ( req , folder . UID , groupKey . RuleGroup )
require . Equal ( t , http . StatusAccepted , response . Status ( ) )
require . Equal ( t , http . StatusAccepted , response . Status ( ) )
@ -672,8 +679,15 @@ func createRequestContextWithPerms(orgID int64, permissions map[int64]map[string
}
}
func createPermissionsForRules ( rules [ ] * models . AlertRule , orgID int64 ) map [ int64 ] map [ string ] [ ] string {
func createPermissionsForRules ( rules [ ] * models . AlertRule , orgID int64 ) map [ int64 ] map [ string ] [ ] string {
ns := map [ string ] any { }
permissions := map [ string ] [ ] string { }
permissions := map [ string ] [ ] string { }
for _ , rule := range rules {
for _ , rule := range rules {
if _ , ok := ns [ rule . NamespaceUID ] ; ! ok {
scope := dashboards . ScopeFoldersProvider . GetResourceScopeUID ( rule . NamespaceUID )
permissions [ dashboards . ActionFoldersRead ] = append ( permissions [ dashboards . ActionFoldersRead ] , scope )
permissions [ ac . ActionAlertingRuleRead ] = append ( permissions [ ac . ActionAlertingRuleRead ] , scope )
ns [ rule . NamespaceUID ] = struct { } { }
}
for _ , query := range rule . Data {
for _ , query := range rule . Data {
permissions [ datasources . ActionQuery ] = append ( permissions [ datasources . ActionQuery ] , datasources . ScopeProvider . GetResourceScopeUID ( query . DatasourceUID ) )
permissions [ datasources . ActionQuery ] = append ( permissions [ datasources . ActionQuery ] , datasources . ScopeProvider . GetResourceScopeUID ( query . DatasourceUID ) )
}
}