mirror of https://github.com/grafana/grafana.git
LibraryPanelRBAC: Fix issue with importing dashboards containing library panels (#83980)
This commit is contained in:
parent
5ce8b60878
commit
6a53864f7a
|
|
@ -26,7 +26,7 @@ func (l *LibraryElementService) registerAPIEndpoints() {
|
|||
entities.Post("/", authorize(ac.EvalPermission(ActionLibraryPanelsCreate)), routing.Wrap(l.createHandler))
|
||||
entities.Delete("/:uid", authorize(ac.EvalPermission(ActionLibraryPanelsDelete, uidScope)), routing.Wrap(l.deleteHandler))
|
||||
entities.Get("/", authorize(ac.EvalPermission(ActionLibraryPanelsRead)), routing.Wrap(l.getAllHandler))
|
||||
entities.Get("/:uid", authorize(ac.EvalPermission(ActionLibraryPanelsRead, uidScope)), routing.Wrap(l.getHandler))
|
||||
entities.Get("/:uid", authorize(ac.EvalPermission(ActionLibraryPanelsRead)), routing.Wrap(l.getHandler))
|
||||
entities.Get("/:uid/connections/", authorize(ac.EvalPermission(ActionLibraryPanelsRead, uidScope)), routing.Wrap(l.getConnectionsHandler))
|
||||
entities.Get("/name/:name", routing.Wrap(l.getByNameHandler))
|
||||
entities.Patch("/:uid", authorize(ac.EvalPermission(ActionLibraryPanelsWrite, uidScope)), routing.Wrap(l.patchHandler))
|
||||
|
|
@ -140,7 +140,8 @@ func (l *LibraryElementService) deleteHandler(c *contextmodel.ReqContext) respon
|
|||
// 404: notFoundError
|
||||
// 500: internalServerError
|
||||
func (l *LibraryElementService) getHandler(c *contextmodel.ReqContext) response.Response {
|
||||
element, err := l.getLibraryElementByUid(c.Req.Context(), c.SignedInUser,
|
||||
ctx := c.Req.Context()
|
||||
element, err := l.getLibraryElementByUid(ctx, c.SignedInUser,
|
||||
model.GetLibraryElementCommand{
|
||||
UID: web.Params(c.Req)[":uid"],
|
||||
FolderName: dashboards.RootFolderName,
|
||||
|
|
@ -150,6 +151,15 @@ func (l *LibraryElementService) getHandler(c *contextmodel.ReqContext) response.
|
|||
return toLibraryElementError(err, "Failed to get library element")
|
||||
}
|
||||
|
||||
if l.features.IsEnabled(ctx, featuremgmt.FlagLibraryPanelRBAC) {
|
||||
allowed, err := l.AccessControl.Evaluate(ctx, c.SignedInUser, ac.EvalPermission(ActionLibraryPanelsRead, ScopeLibraryPanelsProvider.GetResourceScopeUID(web.Params(c.Req)[":uid"])))
|
||||
if err != nil {
|
||||
return response.Error(http.StatusInternalServerError, "unable to evaluate library panel permissions", err)
|
||||
} else if !allowed {
|
||||
return response.Error(http.StatusForbidden, "insufficient permissions for getting library panel", err)
|
||||
}
|
||||
}
|
||||
|
||||
return response.JSON(http.StatusOK, model.LibraryElementResponse{Result: element})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -296,7 +296,12 @@ func (l *LibraryElementService) getLibraryElements(c context.Context, store db.D
|
|||
builder.Write(getFromLibraryElementDTOWithMeta(store.GetDialect()))
|
||||
builder.Write(" INNER JOIN dashboard AS dashboard on le.folder_id = dashboard.id AND le.folder_id <> 0")
|
||||
writeParamSelectorSQL(&builder, params...)
|
||||
builder.WriteDashboardPermissionFilter(signedInUser, dashboardaccess.PERMISSION_VIEW, searchstore.TypeFolder)
|
||||
|
||||
// use permission filter if lib panel RBAC isn't enabled
|
||||
if !l.features.IsEnabled(c, featuremgmt.FlagLibraryPanelRBAC) {
|
||||
builder.WriteDashboardPermissionFilter(signedInUser, dashboardaccess.PERMISSION_VIEW, searchstore.TypeFolder)
|
||||
}
|
||||
|
||||
builder.Write(` OR dashboard.id=0`)
|
||||
if err := session.SQL(builder.GetSQLString(), builder.GetParams()...).Find(&libraryElements); err != nil {
|
||||
return err
|
||||
|
|
|
|||
Loading…
Reference in New Issue