|
|
|
@ -1,6 +1,7 @@ |
|
|
|
|
package sqlstore |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"fmt" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
@ -21,7 +22,6 @@ func init() { |
|
|
|
|
bus.AddHandler("sql", GetDashboardSlugById) |
|
|
|
|
bus.AddHandler("sql", GetDashboardUIDById) |
|
|
|
|
bus.AddHandler("sql", GetDashboardsByPluginId) |
|
|
|
|
bus.AddHandler("sql", GetFoldersForSignedInUser) |
|
|
|
|
bus.AddHandler("sql", GetDashboardPermissionsForUser) |
|
|
|
|
bus.AddHandler("sql", GetDashboardsBySlug) |
|
|
|
|
} |
|
|
|
@ -256,7 +256,7 @@ func findDashboards(query *search.FindPersistedDashboardsQuery) ([]DashboardSear |
|
|
|
|
limit = 1000 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sb := NewSearchBuilder(query.SignedInUser, limit). |
|
|
|
|
sb := NewSearchBuilder(query.SignedInUser, limit, query.Permission). |
|
|
|
|
WithTags(query.Tags). |
|
|
|
|
WithDashboardIdsIn(query.DashboardIds) |
|
|
|
|
|
|
|
|
@ -279,6 +279,7 @@ func findDashboards(query *search.FindPersistedDashboardsQuery) ([]DashboardSear |
|
|
|
|
var res []DashboardSearchProjection |
|
|
|
|
|
|
|
|
|
sql, params := sb.ToSql() |
|
|
|
|
fmt.Printf("%s, %v", sql, params) |
|
|
|
|
sqlog.Info("sql", "sql", sql, "params", params) |
|
|
|
|
err := x.Sql(sql, params...).Find(&res) |
|
|
|
|
if err != nil { |
|
|
|
@ -358,54 +359,6 @@ func GetDashboardTags(query *m.GetDashboardTagsQuery) error { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func GetFoldersForSignedInUser(query *m.GetFoldersForSignedInUserQuery) error { |
|
|
|
|
query.Result = make([]*m.DashboardFolder, 0) |
|
|
|
|
var err error |
|
|
|
|
|
|
|
|
|
if query.SignedInUser.OrgRole == m.ROLE_ADMIN { |
|
|
|
|
sql := `SELECT distinct d.id, d.title |
|
|
|
|
FROM dashboard AS d WHERE d.is_folder = ? AND d.org_id = ? |
|
|
|
|
ORDER BY d.title ASC` |
|
|
|
|
|
|
|
|
|
err = x.Sql(sql, dialect.BooleanStr(true), query.OrgId).Find(&query.Result) |
|
|
|
|
} else { |
|
|
|
|
params := make([]interface{}, 0) |
|
|
|
|
sql := `SELECT distinct d.id, d.title |
|
|
|
|
FROM dashboard AS d |
|
|
|
|
LEFT JOIN dashboard_acl AS da ON d.id = da.dashboard_id |
|
|
|
|
LEFT JOIN team_member AS ugm ON ugm.team_id = da.team_id |
|
|
|
|
LEFT JOIN org_user ou ON ou.role = da.role AND ou.user_id = ? |
|
|
|
|
LEFT JOIN org_user ouRole ON ouRole.role = 'Editor' AND ouRole.user_id = ? AND ouRole.org_id = ?` |
|
|
|
|
params = append(params, query.SignedInUser.UserId) |
|
|
|
|
params = append(params, query.SignedInUser.UserId) |
|
|
|
|
params = append(params, query.OrgId) |
|
|
|
|
|
|
|
|
|
sql += ` WHERE |
|
|
|
|
d.org_id = ? AND |
|
|
|
|
d.is_folder = ? AND |
|
|
|
|
( |
|
|
|
|
(d.has_acl = ? AND da.permission > 1 AND (da.user_id = ? OR ugm.user_id = ? OR ou.id IS NOT NULL)) |
|
|
|
|
OR (d.has_acl = ? AND ouRole.id IS NOT NULL) |
|
|
|
|
)` |
|
|
|
|
params = append(params, query.OrgId) |
|
|
|
|
params = append(params, dialect.BooleanStr(true)) |
|
|
|
|
params = append(params, dialect.BooleanStr(true)) |
|
|
|
|
params = append(params, query.SignedInUser.UserId) |
|
|
|
|
params = append(params, query.SignedInUser.UserId) |
|
|
|
|
params = append(params, dialect.BooleanStr(false)) |
|
|
|
|
|
|
|
|
|
if len(query.Title) > 0 { |
|
|
|
|
sql += " AND d.title " + dialect.LikeStr() + " ?" |
|
|
|
|
params = append(params, "%"+query.Title+"%") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sql += ` ORDER BY d.title ASC` |
|
|
|
|
err = x.Sql(sql, params...).Find(&query.Result) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func DeleteDashboard(cmd *m.DeleteDashboardCommand) error { |
|
|
|
|
return inTransaction(func(sess *DBSession) error { |
|
|
|
|
dashboard := m.Dashboard{Id: cmd.Id, OrgId: cmd.OrgId} |
|
|
|
|