Remove access to folders directly from library elements service (#98665)
* Remove access to folders directly from library elements service * Lint * Remove unwanted comment
This commit is contained in:
@@ -17,6 +17,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/services/dashboards"
|
"github.com/grafana/grafana/pkg/services/dashboards"
|
||||||
"github.com/grafana/grafana/pkg/services/dashboards/dashboardaccess"
|
"github.com/grafana/grafana/pkg/services/dashboards/dashboardaccess"
|
||||||
"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/libraryelements/model"
|
"github.com/grafana/grafana/pkg/services/libraryelements/model"
|
||||||
"github.com/grafana/grafana/pkg/services/org"
|
"github.com/grafana/grafana/pkg/services/org"
|
||||||
"github.com/grafana/grafana/pkg/services/search"
|
"github.com/grafana/grafana/pkg/services/search"
|
||||||
@@ -288,7 +289,6 @@ func (l *LibraryElementService) getLibraryElements(c context.Context, store db.D
|
|||||||
builder := db.NewSqlBuilder(cfg, features, store.GetDialect(), recursiveQueriesAreSupported)
|
builder := db.NewSqlBuilder(cfg, features, store.GetDialect(), recursiveQueriesAreSupported)
|
||||||
builder.Write(selectLibraryElementDTOWithMeta)
|
builder.Write(selectLibraryElementDTOWithMeta)
|
||||||
builder.Write(", ? as folder_name ", cmd.FolderName)
|
builder.Write(", ? as folder_name ", cmd.FolderName)
|
||||||
builder.Write(", COALESCE((SELECT folder.uid FROM folder WHERE folder.id = le.folder_id), '') as folder_uid ")
|
|
||||||
builder.Write(getFromLibraryElementDTOWithMeta(store.GetDialect()))
|
builder.Write(getFromLibraryElementDTOWithMeta(store.GetDialect()))
|
||||||
metrics.MFolderIDsServiceCount.WithLabelValues(metrics.LibraryElements).Inc()
|
metrics.MFolderIDsServiceCount.WithLabelValues(metrics.LibraryElements).Inc()
|
||||||
// nolint:staticcheck
|
// nolint:staticcheck
|
||||||
@@ -296,7 +296,6 @@ func (l *LibraryElementService) getLibraryElements(c context.Context, store db.D
|
|||||||
builder.Write(" UNION ")
|
builder.Write(" UNION ")
|
||||||
builder.Write(selectLibraryElementDTOWithMeta)
|
builder.Write(selectLibraryElementDTOWithMeta)
|
||||||
builder.Write(", dashboard.title as folder_name ")
|
builder.Write(", dashboard.title as folder_name ")
|
||||||
builder.Write(", dashboard.uid as folder_uid ")
|
|
||||||
builder.Write(getFromLibraryElementDTOWithMeta(store.GetDialect()))
|
builder.Write(getFromLibraryElementDTOWithMeta(store.GetDialect()))
|
||||||
builder.Write(" INNER JOIN dashboard AS dashboard on le.folder_id = dashboard.id AND le.folder_id <> 0")
|
builder.Write(" INNER JOIN dashboard AS dashboard on le.folder_id = dashboard.id AND le.folder_id <> 0")
|
||||||
writeParamSelectorSQL(&builder, params...)
|
writeParamSelectorSQL(&builder, params...)
|
||||||
@@ -322,6 +321,11 @@ func (l *LibraryElementService) getLibraryElements(c context.Context, store db.D
|
|||||||
|
|
||||||
leDtos := make([]model.LibraryElementDTO, len(libraryElements))
|
leDtos := make([]model.LibraryElementDTO, len(libraryElements))
|
||||||
for i, libraryElement := range libraryElements {
|
for i, libraryElement := range libraryElements {
|
||||||
|
// nolint:staticcheck
|
||||||
|
f, err := l.folderService.Get(c, &folder.GetFolderQuery{OrgID: signedInUser.GetOrgID(), ID: &libraryElement.FolderID, SignedInUser: signedInUser})
|
||||||
|
if err != nil {
|
||||||
|
return []model.LibraryElementDTO{}, err
|
||||||
|
}
|
||||||
var updatedModel json.RawMessage
|
var updatedModel json.RawMessage
|
||||||
if libraryElement.Kind == int64(model.PanelElement) {
|
if libraryElement.Kind == int64(model.PanelElement) {
|
||||||
updatedModel, err = l.addUidToLibraryPanel(libraryElement.Model, libraryElement.UID)
|
updatedModel, err = l.addUidToLibraryPanel(libraryElement.Model, libraryElement.UID)
|
||||||
@@ -331,8 +335,8 @@ func (l *LibraryElementService) getLibraryElements(c context.Context, store db.D
|
|||||||
}
|
}
|
||||||
|
|
||||||
metrics.MFolderIDsServiceCount.WithLabelValues(metrics.LibraryElements).Inc()
|
metrics.MFolderIDsServiceCount.WithLabelValues(metrics.LibraryElements).Inc()
|
||||||
folderUID := libraryElement.FolderUID
|
folderUID := f.UID
|
||||||
if libraryElement.FolderID == 0 { // nolint:staticcheck
|
if f.ID == 0 { // nolint:staticcheck
|
||||||
folderUID = ac.GeneralFolderUID
|
folderUID = ac.GeneralFolderUID
|
||||||
}
|
}
|
||||||
leDtos[i] = model.LibraryElementDTO{
|
leDtos[i] = model.LibraryElementDTO{
|
||||||
@@ -348,8 +352,8 @@ func (l *LibraryElementService) getLibraryElements(c context.Context, store db.D
|
|||||||
Model: updatedModel,
|
Model: updatedModel,
|
||||||
Version: libraryElement.Version,
|
Version: libraryElement.Version,
|
||||||
Meta: model.LibraryElementDTOMeta{
|
Meta: model.LibraryElementDTOMeta{
|
||||||
FolderName: libraryElement.FolderName,
|
FolderName: f.Title,
|
||||||
FolderUID: libraryElement.FolderUID,
|
FolderUID: folderUID,
|
||||||
ConnectedDashboards: libraryElement.ConnectedDashboards,
|
ConnectedDashboards: libraryElement.ConnectedDashboards,
|
||||||
Created: libraryElement.Created,
|
Created: libraryElement.Created,
|
||||||
Updated: libraryElement.Updated,
|
Updated: libraryElement.Updated,
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ func TestLibraryElementPermissionsGeneralFolder(t *testing.T) {
|
|||||||
result.Result.Meta.UpdatedBy.Name = userInDbName
|
result.Result.Meta.UpdatedBy.Name = userInDbName
|
||||||
result.Result.Meta.UpdatedBy.AvatarUrl = userInDbAvatar
|
result.Result.Meta.UpdatedBy.AvatarUrl = userInDbAvatar
|
||||||
result.Result.Meta.FolderName = "General"
|
result.Result.Meta.FolderName = "General"
|
||||||
result.Result.Meta.FolderUID = ""
|
result.Result.Meta.FolderUID = "general"
|
||||||
result.Result.FolderUID = "general"
|
result.Result.FolderUID = "general"
|
||||||
sc.reqContext.SignedInUser.OrgRole = testCase.role
|
sc.reqContext.SignedInUser.OrgRole = testCase.role
|
||||||
|
|
||||||
|
|||||||
@@ -695,7 +695,7 @@ func getExpected(t *testing.T, res model.LibraryElementDTO, UID string, name str
|
|||||||
Version: 1,
|
Version: 1,
|
||||||
Meta: model.LibraryElementDTOMeta{
|
Meta: model.LibraryElementDTOMeta{
|
||||||
FolderName: "General",
|
FolderName: "General",
|
||||||
FolderUID: "",
|
FolderUID: res.FolderUID,
|
||||||
ConnectedDashboards: 0,
|
ConnectedDashboards: 0,
|
||||||
Created: res.Meta.Created,
|
Created: res.Meta.Created,
|
||||||
Updated: res.Meta.Updated,
|
Updated: res.Meta.Updated,
|
||||||
|
|||||||
Reference in New Issue
Block a user