| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | package sqlstore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"math/rand" | 
					
						
							| 
									
										
										
										
											2020-08-12 23:45:03 +08:00
										 |  |  | 	"strconv" | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	"testing" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/components/simplejson" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-24 17:04:03 +08:00
										 |  |  | func TestIntegrationSQLBuilder(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-06-10 23:46:21 +08:00
										 |  |  | 	if testing.Short() { | 
					
						
							|  |  |  | 		t.Skip("skipping integration test") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-02-24 21:06:22 +08:00
										 |  |  | 	t.Run("WriteDashboardPermissionFilter", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		t.Run("user ACL", func(t *testing.T) { | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{User: true, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UserFromACL: true, RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{User: true, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UserFromACL: true, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{User: true, Permission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				Search{UserFromACL: true, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{User: true, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("role ACL", func(t *testing.T) { | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Role: models.ROLE_VIEWER, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UsersOrgRole: models.ROLE_VIEWER, RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Role: models.ROLE_VIEWER, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UsersOrgRole: models.ROLE_VIEWER, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Role: models.ROLE_EDITOR, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UsersOrgRole: models.ROLE_VIEWER, RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Role: models.ROLE_EDITOR, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UsersOrgRole: models.ROLE_VIEWER, RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("team ACL", func(t *testing.T) { | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Team: true, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UserFromACL: true, RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Team: true, Permission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				Search{UserFromACL: true, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Team: true, Permission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				Search{UserFromACL: true, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				&DashboardPermission{Team: true, Permission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				Search{UserFromACL: false, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("defaults for user ACL", func(t *testing.T) { | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{}, | 
					
						
							|  |  |  | 				nil, | 
					
						
							|  |  |  | 				Search{OrgId: -1, UsersOrgRole: models.ROLE_VIEWER, RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{OrgId: -1}, | 
					
						
							|  |  |  | 				nil, | 
					
						
							|  |  |  | 				Search{OrgId: -1, UsersOrgRole: models.ROLE_VIEWER, RequiredPermission: models.PERMISSION_VIEW}, | 
					
						
							|  |  |  | 				shouldFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{OrgId: -1}, | 
					
						
							|  |  |  | 				nil, | 
					
						
							|  |  |  | 				Search{OrgId: -1, UsersOrgRole: models.ROLE_EDITOR, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			test(t, | 
					
						
							|  |  |  | 				DashboardProps{OrgId: -1}, | 
					
						
							|  |  |  | 				nil, | 
					
						
							|  |  |  | 				Search{OrgId: -1, UsersOrgRole: models.ROLE_VIEWER, RequiredPermission: models.PERMISSION_EDIT}, | 
					
						
							|  |  |  | 				shouldNotFind, | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | const shouldFind = true | 
					
						
							|  |  |  | const shouldNotFind = false | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | type DashboardProps struct { | 
					
						
							|  |  |  | 	OrgId int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DashboardPermission struct { | 
					
						
							|  |  |  | 	User       bool | 
					
						
							|  |  |  | 	Team       bool | 
					
						
							|  |  |  | 	Role       models.RoleType | 
					
						
							|  |  |  | 	Permission models.PermissionType | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type Search struct { | 
					
						
							|  |  |  | 	UsersOrgRole       models.RoleType | 
					
						
							|  |  |  | 	UserFromACL        bool | 
					
						
							|  |  |  | 	RequiredPermission models.PermissionType | 
					
						
							|  |  |  | 	OrgId              int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type dashboardResponse struct { | 
					
						
							|  |  |  | 	Id int64 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func test(t *testing.T, dashboardProps DashboardProps, dashboardPermission *DashboardPermission, search Search, shouldFind bool) { | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	t.Helper() | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	t.Run("", func(t *testing.T) { | 
					
						
							|  |  |  | 		// Will also cleanup the db
 | 
					
						
							|  |  |  | 		sqlStore := InitTestDB(t) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		dashboard := createDummyDashboard(t, sqlStore, dashboardProps) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		var aclUserID int64 | 
					
						
							|  |  |  | 		if dashboardPermission != nil { | 
					
						
							|  |  |  | 			aclUserID = createDummyACL(t, sqlStore, dashboardPermission, search, dashboard.Id) | 
					
						
							|  |  |  | 			t.Logf("Created ACL with user ID %d\n", aclUserID) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		dashboards := getDashboards(t, sqlStore, search, aclUserID) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		if shouldFind { | 
					
						
							|  |  |  | 			require.Len(t, dashboards, 1, "Should return one dashboard") | 
					
						
							|  |  |  | 			assert.Equal(t, dashboard.Id, dashboards[0].Id, "Should return created dashboard") | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			assert.Empty(t, dashboards, "Should not return any dashboard") | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | func createDummyUser(t *testing.T, sqlStore *SQLStore) *models.User { | 
					
						
							|  |  |  | 	t.Helper() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-12 23:45:03 +08:00
										 |  |  | 	uid := strconv.Itoa(rand.Intn(9999999)) | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	createUserCmd := models.CreateUserCommand{ | 
					
						
							| 
									
										
										
										
											2020-08-12 23:45:03 +08:00
										 |  |  | 		Email:          uid + "@example.com", | 
					
						
							|  |  |  | 		Login:          uid, | 
					
						
							|  |  |  | 		Name:           uid, | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		Company:        "", | 
					
						
							|  |  |  | 		OrgName:        "", | 
					
						
							| 
									
										
										
										
											2020-08-12 23:45:03 +08:00
										 |  |  | 		Password:       uid, | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		EmailVerified:  true, | 
					
						
							|  |  |  | 		IsAdmin:        false, | 
					
						
							|  |  |  | 		SkipOrgSetup:   false, | 
					
						
							|  |  |  | 		DefaultOrgRole: string(models.ROLE_VIEWER), | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	user, err := sqlStore.CreateUser(context.Background(), createUserCmd) | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	return user | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | func createDummyTeam(t *testing.T, sqlStore *SQLStore) models.Team { | 
					
						
							|  |  |  | 	t.Helper() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	team, err := sqlStore.CreateTeam("test", "test@example.com", 1) | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	return team | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | func createDummyDashboard(t *testing.T, sqlStore *SQLStore, dashboardProps DashboardProps) *models.Dashboard { | 
					
						
							|  |  |  | 	t.Helper() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	json, err := simplejson.NewJson([]byte(`{"schemaVersion":17,"title":"gdev dashboards","uid":"","version":1}`)) | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	saveDashboardCmd := models.SaveDashboardCommand{ | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		Dashboard:    json, | 
					
						
							|  |  |  | 		UserId:       0, | 
					
						
							|  |  |  | 		Overwrite:    false, | 
					
						
							|  |  |  | 		Message:      "", | 
					
						
							|  |  |  | 		RestoredFrom: 0, | 
					
						
							|  |  |  | 		PluginId:     "", | 
					
						
							|  |  |  | 		FolderId:     0, | 
					
						
							|  |  |  | 		IsFolder:     false, | 
					
						
							|  |  |  | 		UpdatedAt:    time.Time{}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if dashboardProps.OrgId != 0 { | 
					
						
							|  |  |  | 		saveDashboardCmd.OrgId = dashboardProps.OrgId | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		saveDashboardCmd.OrgId = 1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-16 21:15:44 +08:00
										 |  |  | 	dash := insertTestDashboard(t, sqlStore, "", saveDashboardCmd.OrgId, 0, false, nil) | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	t.Logf("Created dashboard with ID %d and org ID %d\n", dash.Id, dash.OrgId) | 
					
						
							|  |  |  | 	return dash | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | func createDummyACL(t *testing.T, sqlStore *SQLStore, dashboardPermission *DashboardPermission, search Search, dashboardID int64) int64 { | 
					
						
							|  |  |  | 	t.Helper() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	acl := &models.DashboardAcl{ | 
					
						
							| 
									
										
										
										
											2020-11-18 00:09:14 +08:00
										 |  |  | 		OrgID:       1, | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		Created:     time.Now(), | 
					
						
							|  |  |  | 		Updated:     time.Now(), | 
					
						
							|  |  |  | 		Permission:  dashboardPermission.Permission, | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		DashboardID: dashboardID, | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var user *models.User | 
					
						
							|  |  |  | 	if dashboardPermission.User { | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		t.Logf("Creating user") | 
					
						
							|  |  |  | 		user = createDummyUser(t, sqlStore) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-18 00:09:14 +08:00
										 |  |  | 		acl.UserID = user.Id | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if dashboardPermission.Team { | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		t.Logf("Creating team") | 
					
						
							|  |  |  | 		team := createDummyTeam(t, sqlStore) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		if search.UserFromACL { | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 			user = createDummyUser(t, sqlStore) | 
					
						
							|  |  |  | 			err := sqlStore.AddTeamMember(user.Id, 1, team.Id, false, 0) | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 			t.Logf("Created team member with ID %d", user.Id) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-18 00:09:14 +08:00
										 |  |  | 		acl.TeamID = team.Id | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(string(dashboardPermission.Role)) > 0 { | 
					
						
							|  |  |  | 		acl.Role = &dashboardPermission.Role | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-16 21:15:44 +08:00
										 |  |  | 	err := updateDashboardAcl(t, sqlStore, dashboardID, acl) | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	if user != nil { | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		return user.Id | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	return 0 | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | func getDashboards(t *testing.T, sqlStore *SQLStore, search Search, aclUserID int64) []*dashboardResponse { | 
					
						
							|  |  |  | 	t.Helper() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-11 13:21:08 +08:00
										 |  |  | 	builder := &SQLBuilder{} | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	signedInUser := &models.SignedInUser{ | 
					
						
							|  |  |  | 		UserId: 9999999999, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if search.OrgId == 0 { | 
					
						
							|  |  |  | 		signedInUser.OrgId = 1 | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		signedInUser.OrgId = search.OrgId | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(string(search.UsersOrgRole)) > 0 { | 
					
						
							|  |  |  | 		signedInUser.OrgRole = search.UsersOrgRole | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		signedInUser.OrgRole = models.ROLE_VIEWER | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if search.UserFromACL { | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 		signedInUser.UserId = aclUserID | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var res []*dashboardResponse | 
					
						
							|  |  |  | 	builder.Write("SELECT * FROM dashboard WHERE true") | 
					
						
							| 
									
										
										
										
											2021-02-24 21:06:22 +08:00
										 |  |  | 	builder.WriteDashboardPermissionFilter(signedInUser, search.RequiredPermission) | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	t.Logf("Searching for dashboards, SQL: %q\n", builder.GetSQLString()) | 
					
						
							| 
									
										
										
										
											2020-11-11 13:21:08 +08:00
										 |  |  | 	err := sqlStore.engine.SQL(builder.GetSQLString(), builder.params...).Find(&res) | 
					
						
							| 
									
										
										
										
											2021-03-17 23:06:10 +08:00
										 |  |  | 	require.NoError(t, err) | 
					
						
							|  |  |  | 	return res | 
					
						
							| 
									
										
										
										
											2019-06-05 16:55:50 +08:00
										 |  |  | } |