feat: Add new read filtering to datasources guardian (#91345)
* feat: Add new read filtering to datasources guardian * Apply suggestion to use datasources read guardian check for frontend settings --------- Co-authored-by: Eric Leijonmarck <eric.leijonmarck@gmail.com>
This commit is contained in:
co-authored by
Eric Leijonmarck
parent
94a119ac63
commit
0176ead117
@@ -54,7 +54,7 @@ func (hs *HTTPServer) GetDataSources(c *contextmodel.ReqContext) response.Respon
|
||||
return response.Error(http.StatusInternalServerError, "Failed to query datasources", err)
|
||||
}
|
||||
|
||||
filtered, err := hs.dsGuardian.New(c.SignedInUser.OrgID, c.SignedInUser).FilterDatasourcesByQueryPermissions(dataSources)
|
||||
filtered, err := hs.dsGuardian.New(c.SignedInUser.OrgID, c.SignedInUser).FilterDatasourcesByReadPermissions(dataSources)
|
||||
if err != nil {
|
||||
return response.Error(http.StatusInternalServerError, "Failed to query datasources", err)
|
||||
}
|
||||
|
||||
@@ -410,7 +410,7 @@ func (hs *HTTPServer) getFSDataSources(c *contextmodel.ReqContext, availablePlug
|
||||
// If RBAC is enabled, it will filter out all datasources for a public user, so we need to skip it
|
||||
orgDataSources = dataSources
|
||||
} else {
|
||||
filtered, err := hs.dsGuardian.New(c.SignedInUser.OrgID, c.SignedInUser).FilterDatasourcesByQueryPermissions(dataSources)
|
||||
filtered, err := hs.dsGuardian.New(c.SignedInUser.OrgID, c.SignedInUser).FilterDatasourcesByReadPermissions(dataSources)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -17,3 +17,7 @@ func (n AllowGuardian) CanQuery(datasourceID int64) (bool, error) {
|
||||
func (n AllowGuardian) FilterDatasourcesByQueryPermissions(ds []*datasources.DataSource) ([]*datasources.DataSource, error) {
|
||||
return ds, nil
|
||||
}
|
||||
|
||||
func (n AllowGuardian) FilterDatasourcesByReadPermissions(ds []*datasources.DataSource) ([]*datasources.DataSource, error) {
|
||||
return ds, nil
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ type DatasourceGuardianProvider interface {
|
||||
|
||||
type DatasourceGuardian interface {
|
||||
CanQuery(datasourceID int64) (bool, error)
|
||||
FilterDatasourcesByReadPermissions([]*datasources.DataSource) ([]*datasources.DataSource, error)
|
||||
FilterDatasourcesByQueryPermissions([]*datasources.DataSource) ([]*datasources.DataSource, error)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user